PHP的正则表达式:几个停止字符积极lookbehind
问题描述:
嗨stackoverflow社区!
我想在PHP中使用一个简单的正则表达式表达式,基于正面后视。我的目标是提取域名和一组特定字符(?或&或/)之间的URL中的所有内容。我想提取 “栏” 上的那些例子:PHP的正则表达式:几个停止字符积极lookbehind
foo.com/bar?
foo.com/bar&
foo.com/bar/
我试图
(?<=foo\.com\/)[^/?&]+
它工作正常the plateform test 但与PHP 5.3x preg_match:错误thr自己的是,我不能使用几个停止字符 - 它适用于一个。
我也尝试了积极lookbehind/lookahead的组合,但问题仍然相同。 我做错了什么?
答
在PHP中,不像(比如说)JavaScript,不能在不转义它的情况下使用正则表达式分隔符,即使在字符类内部也不能使用正则表达式分隔符。所以,你需要改变这一点:
"/(?<=foo\.com\/)[^/?&]+/"
这样:
"/(?<=foo\.com\/)[^\/?&]+/"
答
逃生斜线:
preg_match("/(?<=foo\.com\/)[^\/?&]+/", "http://www.foo.com/bar?", $result);
here ___^
或使用其他分隔符
preg_match("#(?<=foo\.com/)[^/?&]+#", "http://www.foo.com/bar?", $result);
你封闭正则表达式里面的分隔符?你能告诉我们你的代码吗? – Toto 2012-03-16 12:24:49
@ M42肯定!这里是:'preg_match(“/(? 2012-03-16 12:33:37
您需要转义所有斜线:'/(? Toto 2012-03-16 12:35:18