代码之家  ›  专栏  ›  技术社区  ›  alex

没有用正则表达式得到什么东西

  •  2
  • alex  · 技术社区  · 14 年前

    我试图 answer this question (答案已删除,所以这是我的代码)。

    <?php
    function remove_get_param($uri, $name) {  
            return preg_replace('/(?<=\?|&|;)' . preg_quote($name, '/') . '=[^&;]*/', '', $uri);     
    }
    

    我的初始代码正在使用第一个参数,例如 ? 当它不应该的时候。我试着做一个回溯断言,但是php说…

    警告:preg_replace():编译失败:在第4行的偏移量11处没有重复的内容

    我对regex断言比较陌生,但我假设 后向断言 方法 确保此模式在前面,但不要将其作为匹配的一部分使用 .

    我通过谷歌搜索语法 Regex奶酪热 我下载的结果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 回复  |  直到 14 年前
        1
  •  2
  •   Tim Stone    14 年前

    你的密码 testing on Codepad 在查找后面有一个附加的星号:

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

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