|
|
|
| Что-то в самом лёгком запутался.
Как будет "не abc"? То есть чтобы в искомой строке не встречалась подстрока "abc"?
На ум приходит только [^a][^b][^c], но должно быть что-то полегче. | |
|
|
|
|
|
|
|
для: Qiao
(04.06.2009 в 13:00)
| | Именно подстрока? Тогда можно отталкиваться от следующего скрипта
<?php
$text = "dfds fdsfsdlfsd abc dlfdjflds";
if(!preg_match("|\babc\b|is", $text)) echo "Не встречается";
else echo "Встречается";
?>
|
| |
|
|
|
|
|
|
|
для: cheops
(04.06.2009 в 13:50)
| | Понятно, то есть тут чисто логика языка, а в самих регулярных выражениях может отрицаться только один символ [^a]. Это недочёт - что-нибудь типа ^(abc) не помешало бы.
Зачем вы \b использовали? Ведь в условии не стоит что это отдельное слово. | |
|
|
|
|
|
|
|
для: Qiao
(04.06.2009 в 14:09)
| | Есть условные подмаски.
Утветдительные и отрицательные.
Проверяющие уже просмотренную и еще не просмотренную часть строки. | |
|
|
|
|
|
|
|
для: Qiao
(04.06.2009 в 14:09)
| | >Понятно, то есть тут чисто логика языка, а в самих регулярных выражениях может отрицаться
>только один символ [^a]. Это недочёт - что-нибудь типа ^(abc) не помешало бы.
Можно извернуться через негативные опережающие и ретроспективные проверки (т.е. всякие (?<!...) и (?!...))... но это неудобно и эти проверки никто не любит. В вашем случае такая проверка выглядела бы вот так
<?php
$text = "dfds fdsfsdlfsd abc dlfdjflds";
if(preg_match("|a(?!bc)|is", $text)) echo "Не встречается";
else echo "Встречается";
?>
|
>Зачем вы \b использовали? Ведь в условии не стоит что это отдельное слово.
Чего-то показалось :))) | |
|
|
|
|
|
|
|
для: cheops
(04.06.2009 в 14:22)
| | Всё ясно, спасибо. Про подмаски забыл.
Вот уже и три решения - побуквенное отрицание, отрицательные подмаски и логика языка | |
|
|
|