Гость
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / регулярное выражение - отрицание слова / 3 сообщений из 3, страница 1 из 1
16.04.2004, 09:38
    #32483733
galana
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
регулярное выражение - отрицание слова
Возможно ли написать регулярное выражение для поиска по некоторым критериям подстроки, в которой НЕ ДОЛЖНО встречаться некое слово?
Т.е.: "(условие слева)(любая подстрока, не содержащая 'запрещенное слово')(условие справа)".
Решить задачу можно, последовательно находя конструкцию "(условие слева)(подстрока с запрещенным словом)", и удаляя ее, пока не очистим всю строку. Но как написать это одним рег. выражением?
...
Рейтинг: 0 / 0
16.04.2004, 16:38
    #32484696
fedd
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
регулярное выражение - отрицание слова
я тоже искал, но не нашел.

а сейчас в новых vbScriptовских перлообразных регекспах нашел такую штуку - (?!14) - то есть "не 14". попробуйте и расскажите, работает или нет.

только это из области перл-совместимых регулярных выражений. а Вы может быть, не ими пользуетесь.

*** Ухожу с ПТ ***
...
Рейтинг: 0 / 0
16.04.2004, 21:16
    #32485120
galana
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
регулярное выражение - отрицание слова
Спасибо, это называется lookahead- и lookbehind-условия.
http://www.rsdn.ru/article/alg/regular.xml#XSLTPART143120120
К сожалению, в PHP-регах они не работают.
Выкрутилась так:
1. Выбираю некий символ, которого в строке точно нет (например, '#').
Если уверенности нет, то делаю замену '#' -> 'my_secret_replace'
2. Переобозначаю запретное слово в этот символ:
'запретное слово' -> '#'
3. Теперь легко написать условие отрицания этого символа (слова): [^#].
Ищу то, что хочу.
4. Делаю обратную замену 'my_secret_replace' -> #.

$str = preg_replace("/#/","my_secret_replace", $str);
$str = preg_replace("/запретное слово/","#", $str);
preg_match ("/(условие слева)([^#]+)(условие справа)/U", $str, $arr);
$str = preg_replace("/my_secret_replace/", "#", $str);
...
Рейтинг: 0 / 0
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / регулярное выражение - отрицание слова / 3 сообщений из 3, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]