没有正则表达式的东西

时间:2010-10-14 01:37:40

标签: php regex

我尝试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&param2=2', 'param2') . "\n";
echo remove_get_param('http://mysite.com?param1=1&param2=2', 'param1'); 

我还应该提到我在codepad.org上遇到了这些错误。很抱歉没有提到这一点,我知道codepad.org在一个时髦的环境中运行。

1 个答案:

答案 0 :(得分:2)

你是testing on Codepad的代码在lookbehind之后有一个额外的星号:

return preg_replace('/(?!=\?|&|;)*' . preg_quote($name) . '=[^&;]/', '', $uri);
                              // ^-- problem character

由于0或更多重复没有任何内容可用,因此正则表达式编译失败并出现上述错误。看起来星号是你在表达式结尾处出现的那个星号,如你问题中的例子所示。