PHP Regex: несколько символов остановки с положительным взглядом - PullRequest
1 голос
/ 16 марта 2012

Привет, сообщество stackoverflow!
Я пытаюсь использовать простое выражение регулярных выражений в PHP на основе Положительный взгляд за . Моя цель состоит в том, чтобы извлечь все в URL между доменным именем и набором определенных символов (? Или & или /). Я хочу извлечь "бар" на этих примерах:

  • foo.com/bar?
  • foo.com/bar&
  • foo.com/bar/

Я пытался

(?<=foo\.com\/)[^/?&]+  

отлично работает в тесте формы листа но не с PHP 5.3x preg_match: выдается ошибка в том, что я не могу использовать несколько символов остановки - он работает с одним.

Я также попробовал комбинацию позитивного взгляда назад / вперед, но проблема остается той же. Что я сделал не так?

Ответы [ 2 ]

1 голос
/ 16 марта 2012

избежать косой черты:

preg_match("/(?<=foo\.com\/)[^\/?&]+/", "http://www.foo.com/bar?", $result);
                      here ___^

или используйте другой разделитель

preg_match("#(?<=foo\.com/)[^/?&]+#", "http://www.foo.com/bar?", $result);
1 голос
/ 16 марта 2012

В PHP, в отличие от (скажем) JavaScript, вы не можете использовать разделитель регулярных выражений без его экранирования, даже внутри класса символов .Итак, вам нужно изменить это:

"/(?<=foo\.com\/)[^/?&]+/"

на это:

"/(?<=foo\.com\/)[^\/?&]+/"
...