Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум Регулярные Выражения

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: не "abc" ?
 
 автор: Qiao   (04.06.2009 в 13:00)   письмо автору
 
 

Что-то в самом лёгком запутался.

Как будет "не abc"? То есть чтобы в искомой строке не встречалась подстрока "abc"?

На ум приходит только [^a][^b][^c], но должно быть что-то полегче.

  Ответить  
 
 автор: cheops   (04.06.2009 в 13:50)   письмо автору
 
   для: Qiao   (04.06.2009 в 13:00)
 

Именно подстрока? Тогда можно отталкиваться от следующего скрипта
<?php
  $text 
"dfds fdsfsdlfsd abc dlfdjflds";
  if(!
preg_match("|\babc\b|is"$text)) echo "Не встречается";
  else echo 
"Встречается";
?>

  Ответить  
 
 автор: Qiao   (04.06.2009 в 14:09)   письмо автору
 
   для: cheops   (04.06.2009 в 13:50)
 

Понятно, то есть тут чисто логика языка, а в самих регулярных выражениях может отрицаться только один символ [^a]. Это недочёт - что-нибудь типа ^(abc) не помешало бы.


Зачем вы \b использовали? Ведь в условии не стоит что это отдельное слово.

  Ответить  
 
 автор: Trianon   (04.06.2009 в 14:20)   письмо автору
 
   для: Qiao   (04.06.2009 в 14:09)
 

Есть условные подмаски.
Утветдительные и отрицательные.
Проверяющие уже просмотренную и еще не просмотренную часть строки.

  Ответить  
 
 автор: cheops   (04.06.2009 в 14:22)   письмо автору
 
   для: 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 использовали? Ведь в условии не стоит что это отдельное слово.
Чего-то показалось :)))

  Ответить  
 
 автор: Qiao   (04.06.2009 в 14:40)   письмо автору
 
   для: cheops   (04.06.2009 в 14:22)
 

Всё ясно, спасибо. Про подмаски забыл.
Вот уже и три решения - побуквенное отрицание, отрицательные подмаски и логика языка

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования