您好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的组合,但问题仍然是一样的。 我做错了什么?
答案 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);