IMHO.WS

IMHO.WS (https://www.imho.ws/index.php)
-   Веб-программирование (https://www.imho.ws/forumdisplay.php?f=29)
-   -   Регулярные выражения (https://www.imho.ws/showthread.php?t=86361)

apoc 26.05.2005 16:35

Регулярные выражения
 
Нужно сделать такую конструкцию чтобы отсеивать только чётные или нечетные повторения... например...
Строка:
"Hello World!!!"

удалить "!" - если их количество подряд стоячих не четное...

Результат:
"Hello World"

RaZEr 26.05.2005 16:42

Цитата:

Сообщение от apoc
отсеивать только чётные или нечетные повторения

А по-русски?

Если я правильно догадался: /\!(\!\!)+/ (снесёт 3,5,7 и т.д.)

apoc 26.05.2005 16:56

Правильно только не совсем я правильно высказался... в общем есть вот такое:

vasya = 'lena'
zina = 'petya'
veronika = 'oleg valer\'ovich'

это все текст, нужно заменить такое вот \' на какой нить символ скажем chr(1)....
но вся проблема в том что может быть такой вариант:

vasya = 'lena'
zina = 'petya'
veronika = 'oleg valer\'ovich\\'

когда выражение типа \\' заменится на \ и символ chr(1) поэтому надо менять только когда нечетное количество...
:(

RaZEr 26.05.2005 17:02

ну так: /[^\\]\\\'/ . и зачем вообще такое нужно?...

apoc 26.05.2005 17:24

Ладно... вообщем не то... ну да ладно, завтра на свежую голову что то придумаю. Да парсер это для импорта SQL запросов в базу. Работал-работал, а тут попался такой вот запросик, и загнулся.
Спасибо, буду дальше думать.

Al-x 26.05.2005 23:05

на чём пишешь?
Просто если на PHP, то там есть функция mysql_real_escape_string - она это и делает.

apoc 30.05.2005 10:25

Есть файл с запросами и надо их выполнять по очереди, (дамп короче)...
Надо определять начало и конец каждого запроса.
Не совсем тут mysql_real_escape_string поможет :))))

_ARMAGEDDON_ 30.05.2005 15:39

запросы ведь друг от друга каким-то символом отделяются? или в одну строчку идут сплошным текстом?
explode не поможет?

apoc 30.05.2005 15:41

:) отделяются :))))) точкой с запятой :)
но в тексте тоже такие имеются :))))
было бы очень легко, если б так

_ARMAGEDDON_ 31.05.2005 14:12

отделяй другими символами... которые в тексте не встречаются
например - :#$%;
или chr()

четные нечетные повторения тебе не помогут

apoc 31.05.2005 14:24

:) уже так и сделал... :) забыл сказать... :)

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.