我尝试answer this question(已删除答案,因此这是我的代码)。
<?php
function remove_get_param($uri, $name) {
return preg_replace('/(?<=\?|&|;)' . preg_quote($name, '/') . '=[^&;]*/', '', $uri);
}
我的初始代码消耗了第一个参数,例如?
。我试图做一个lookbehind断言,但PHP说...
警告:preg_replace():编译失败:在第4行的偏移11处无需重复
我对正则表达式断言相对较新,但我认为 lookbehind断言意味着确保此模式先于,但不要将其作为匹配的一部分使用
我通过googling regex cheetsheat 查找语法,我下载的结果PNG表示语法为?<=
。
我做错了什么?
由于
再次问好。以下是导致上述警告两次的一些示例用法......
echo remove_get_param('http://mysite.com?param1=1¶m2=2', 'param2') . "\n";
echo remove_get_param('http://mysite.com?param1=1¶m2=2', 'param1');
我还应该提到我在codepad.org上遇到了这些错误。很抱歉没有提到这一点,我知道codepad.org在一个时髦的环境中运行。
答案 0 :(得分:2)
你是testing on Codepad的代码在lookbehind之后有一个额外的星号:
return preg_replace('/(?!=\?|&|;)*' . preg_quote($name) . '=[^&;]/', '', $uri);
// ^-- problem character
由于0或更多重复没有任何内容可用,因此正则表达式编译失败并出现上述错误。看起来星号是你在表达式结尾处出现的那个星号,如你问题中的例子所示。