![]() |
Регулярные выражения
Нужно сделать такую конструкцию чтобы отсеивать только чётные или нечетные повторения... например...
Строка: "Hello World!!!" удалить "!" - если их количество подряд стоячих не четное... Результат: "Hello World" |
Цитата:
Если я правильно догадался: /\!(\!\!)+/ (снесёт 3,5,7 и т.д.) |
Правильно только не совсем я правильно высказался... в общем есть вот такое:
vasya = 'lena' zina = 'petya' veronika = 'oleg valer\'ovich' это все текст, нужно заменить такое вот \' на какой нить символ скажем chr(1).... но вся проблема в том что может быть такой вариант: vasya = 'lena' zina = 'petya' veronika = 'oleg valer\'ovich\\' когда выражение типа \\' заменится на \ и символ chr(1) поэтому надо менять только когда нечетное количество... :( |
ну так: /[^\\]\\\'/ . и зачем вообще такое нужно?...
|
Ладно... вообщем не то... ну да ладно, завтра на свежую голову что то придумаю. Да парсер это для импорта SQL запросов в базу. Работал-работал, а тут попался такой вот запросик, и загнулся.
Спасибо, буду дальше думать. |
на чём пишешь?
Просто если на PHP, то там есть функция mysql_real_escape_string - она это и делает. |
Есть файл с запросами и надо их выполнять по очереди, (дамп короче)...
Надо определять начало и конец каждого запроса. Не совсем тут mysql_real_escape_string поможет :)))) |
запросы ведь друг от друга каким-то символом отделяются? или в одну строчку идут сплошным текстом?
explode не поможет? |
:) отделяются :))))) точкой с запятой :)
но в тексте тоже такие имеются :)))) было бы очень легко, если б так |
отделяй другими символами... которые в тексте не встречаются
например - :#$%; или chr() четные нечетные повторения тебе не помогут |
:) уже так и сделал... :) забыл сказать... :)
1) $query = str_replace(array("\r","\\'"),array("",chr(1)),$query); (заменил все "интересные последовательности") 2) preg_match_all("/'[^']*'/",$query,$query_array); (выбрал все поля) 3) $change_from = ";\n"; $change_to = chr(30); foreach($query_array[0] as $query_line) { $position = strpos($query_line,$change_from); if ($position > 0) { $query = str_replace($query_line,str_replace($change_from,$change_to,$query_lin e),$query); } } (заменил все переносы строк в полях на символ 30 если встретился) 4) $query = str_replace(chr(1),"\\'",$query); $query_array = explode($change_from,$query); (Вернул текст с запросами к нормальному виду... а именно восстановил "интересные последовательности". А затем превратил в массив запросов весь текст.) 5) $query = str_replace($change_to,$change_from,$query); (При выполнении запроса, вернул в значение полей символ ";") Собственно говоря, наверное есть и более простые решения, а может и более сложные, но на данном этапе, мне этого достаточно, будем считать, что я нашел решение. Можно и не продолжать :))) если конечно у кого то не найдется более элегантное решение данной проблемы. Спасибо всем, особенно модераторам :) |
| Часовой пояс GMT +4, время: 23:09. |
Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.