Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: найти строку с кавычками в тексте
Форумы портала PHP.SU » PHP » Регулярные выражения » найти строку с кавычками в тексте

Страниц (1): [1]
 

1. DlTA - 25 Августа, 2016 - 21:52:22 - перейти к сообщению
у меня строка
где
1,2,'text','text\'text2'
парсится не очень

(\d),(\d),'(\w)','(а как тут быть???)'
то есть в тексте с кавычками есть защищенная кавычка??

(и она не всегда есть)
2. Мелкий - 25 Августа, 2016 - 22:13:07 - перейти к сообщению
str_getcsv?

Если не учитывать случай \\', то lookbehind проверку можно воткнуть.
3. DlTA - 25 Августа, 2016 - 22:28:42 - перейти к сообщению
а что такое "lookbehind"?
4. Мелкий - 25 Августа, 2016 - 22:46:35 - перейти к сообщению
Позиционные проверки: http://php.net/manual/en/regexp....e.assertions.php
5. DlTA - 25 Августа, 2016 - 22:54:24 - перейти к сообщению
косяк, в тексте могут быть и запятые, и функция разрывает на новый элемент массива
хотя они находятся в это время в кавычках((
6. Мелкий - 25 Августа, 2016 - 23:16:40 - перейти к сообщению
Разве?
CODE (bash):
скопировать код в буфер обмена
  1. melkij@melkij:~$ cat test.php
  2. <?php
  3. var_dump(str_getcsv("1,2,'text','text\'text, text2'", ',', "'"));
  4. melkij@melkij:~$ php test.php
  5. array(4) {
  6.   [0]=>
  7.   string(1) "1"
  8.   [1]=>
  9.   string(1) "2"
  10.   [2]=>
  11.   string(4) "text"
  12.   [3]=>
  13.   string(17) "text\'text, text2"
  14. }
7. DlTA - 25 Августа, 2016 - 23:45:52 - перейти к сообщению
эм, блин, можно же еще указать кавычки((

+
(Добавление)
а что делает четвертый параметр?
8. Мелкий - 26 Августа, 2016 - 09:18:33 - перейти к сообщению
Задаёт символ экранирования, чтобы использовать вместо \ что-нибудь другое, например:
PHP:
скопировать код в буфер обмена
  1. var_dump(str_getcsv("1,2,'text','text#'text, text2'", ',', "'", '#'));
9. DlTA - 26 Августа, 2016 - 10:05:25 - перейти к сообщению
в смысле это будет конец строки или что?
10. Мелкий - 26 Августа, 2016 - 11:23:23 - перейти к сообщению
Последним элементом будет строка text#'text, text2
Кавычка в строке есть, но перед ней символ, который указан как символ экранирования - поэтому эта кавычка не учитывается как конец элемента.
11. DlTA - 27 Августа, 2016 - 23:11:46 - перейти к сообщению
а все таки,
есть способ разобрать таблицу экспорта для базы
чтоб оттуда взять нужную часть для импорта?

нынешний вариант сработал, но это было ну очень долго..
12. Fart - 13 Сентября, 2016 - 13:06:24 - перейти к сообщению
если правильно понял, то

\w+[\\]\D\w+

только срабатывает когда есть \

(Добавление)

и еще вот так

срабатывает когда есть \ и допускает в конце слова и начало следующего пробел

\w+\s*[\\]\D\s*\w+
(Добавление)
-
но так как не буквенные символы относятся если правильно помню к управляющим, то тогда нужно указывать все кроме (в случае если нужны какие то символы кроме ' " )

 

Powered by ExBB FM 1.0 RC1