Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Тексты > Проверка отсутствия слова


Автор: DCoder 16.12.2010, 09:28
Доброго времени суток!

У меня есть строка, содержащая путь:
/section1/section2/section3/

Как должен выглядеть PCRE паттерн для проверки того, что section2 != blog, например?

Автор: patap 16.12.2010, 11:53
Код

  $section = 'blog';
  $path = '/section1/section2/section3/';
  
  if (preg_match('#^/.+?/' . $section . '/.+?/$#i', $path) == 0) {
    $res = 'no matches';
  } else {
    $res = 'got matches';
  }
  
  echo $res;

Автор: DCoder 16.12.2010, 14:51
Хорошо, уточню. 

Мне нужно передать шаблон пути для системы ЧПУ CMS системы, поэтому я не могу проводить дополнительные действия с результатом preg_match. 
Иными словами требуется такой шаблон, на который preg_match вернёт именно true

Автор: patap 17.12.2010, 12:55
что-то не уловлю сути...

в пути нужно именно вторую секцию проверять на неравность? если да, то нужно проверять все время на то, что не равна ли она какой-то постоянной подстроке, в данном случае - это "blog". Или же там может быть какой-то набор из подстрок, которым не должена соответствовать секция 2?


незнаю то ли это, должно по идее работать корректно, если передается строка, структура которой соответствует той, котрую привел ты (т.е. имеено такой форме "/section1/section2/section3/")
вот вариант если нужно проверять только одну подстроку "blog"
Код

^/.+?/(?!blog/)(.+?)/.+?/$

тут если нужно учесть несколько подстрок, перечисли их через |
Код

^/.+?/(?!(blog|blog2)/)(.+?)/.+?/$

Автор: DCoder 17.12.2010, 15:13
Да! Именно оно! Спасибо!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)