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

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: найти строку с кавычками в тексте

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


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

> Без описания
DlTA
Отправлено: 25 Августа, 2016 - 21:52:22
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2952
Дата рег-ции: Окт. 2010  


Помог: 53 раз(а)




у меня строка
где
1,2,'text','text\'text2'
парсится не очень

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

(и она не всегда есть)
 
 Top
Мелкий Супермодератор
Отправлено: 25 Августа, 2016 - 22:13:07
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




str_getcsv?

Если не учитывать случай \\', то lookbehind проверку можно воткнуть.


-----
PostgreSQL DBA
 
 Top
DlTA
Отправлено: 25 Августа, 2016 - 22:28:42
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2952
Дата рег-ции: Окт. 2010  


Помог: 53 раз(а)




а что такое "lookbehind"?

(Отредактировано автором: 25 Августа, 2016 - 22:29:02)

 
 Top
Мелкий Супермодератор
Отправлено: 25 Августа, 2016 - 22:46:35
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




Позиционные проверки: http://php.net/manual/en/regexp....e.assertions.php


-----
PostgreSQL DBA
 
 Top
DlTA
Отправлено: 25 Августа, 2016 - 22:54:24
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2952
Дата рег-ции: Окт. 2010  


Помог: 53 раз(а)




косяк, в тексте могут быть и запятые, и функция разрывает на новый элемент массива
хотя они находятся в это время в кавычках((
 
 Top
Мелкий Супермодератор
Отправлено: 25 Августа, 2016 - 23:16:40
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




Разве?
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. }


-----
PostgreSQL DBA
 
 Top
DlTA
Отправлено: 25 Августа, 2016 - 23:45:52
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2952
Дата рег-ции: Окт. 2010  


Помог: 53 раз(а)




эм, блин, можно же еще указать кавычки((

+
(Добавление)
а что делает четвертый параметр?
 
 Top
Мелкий Супермодератор
Отправлено: 26 Августа, 2016 - 09:18:33
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




Задаёт символ экранирования, чтобы использовать вместо \ что-нибудь другое, например:
PHP:
скопировать код в буфер обмена
  1. var_dump(str_getcsv("1,2,'text','text#'text, text2'", ',', "'", '#'));


-----
PostgreSQL DBA
 
 Top
DlTA
Отправлено: 26 Августа, 2016 - 10:05:25
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2952
Дата рег-ции: Окт. 2010  


Помог: 53 раз(а)




в смысле это будет конец строки или что?
 
 Top
Мелкий Супермодератор
Отправлено: 26 Августа, 2016 - 11:23:23
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




Последним элементом будет строка text#'text, text2
Кавычка в строке есть, но перед ней символ, который указан как символ экранирования - поэтому эта кавычка не учитывается как конец элемента.


-----
PostgreSQL DBA
 
 Top
DlTA
Отправлено: 27 Августа, 2016 - 23:11:46
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2952
Дата рег-ции: Окт. 2010  


Помог: 53 раз(а)




а все таки,
есть способ разобрать таблицу экспорта для базы
чтоб оттуда взять нужную часть для импорта?

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



Посетитель


Покинул форум
Сообщений всего: 324
Дата рег-ции: Июль 2016  


Помог: 10 раз(а)




если правильно понял, то

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

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

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

и еще вот так

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

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

(Отредактировано автором: 13 Сентября, 2016 - 13:09:14)

 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Регулярные выражения »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB