PHP Regex:具有正面lookbehind的几个停止字符

时间:2012-03-16 12:17:52

标签: php regex lookbehind

您好stackoverflow社区!
我试图在PHP中使用一个基于 Positive lookbehind 的简单正则表达式。我的目标是在域名和一组特定字符(?或&或/)之间的URL中提取所有内容。我想在这些例子中提取“bar”:

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

我试过

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

the plateform test中工作正常 但不能使用PHP 5.3x preg_match:抛出的错误是我不能使用多个停止字符 - 它可以与一个停止使用。

我也尝试了积极的lookbehind / lookahead的组合,但问题仍然是一样的。 我做错了什么?

2 个答案:

答案 0 :(得分:1)

在PHP中,与(比如)JavaScript不同,你不能在不转义它的情况下使用正则表达式分隔符,甚至在字符类中。所以,你需要改变这个:

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

到此:

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

答案 1 :(得分:1)

逃避斜杠:

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

或使用其他分隔符

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