【问题标题】:Check for multiple patterns preg_replace检查多个模式 preg_replace
【发布时间】:2025-12-05 21:50:01
【问题描述】:

我正在尝试找出 &page=([0-9]+)page=([0-9]+) 是否在字符串中,然后将其删除,但出现错误。

我的尝试

$queryString = '?order=stud_firstname&sort=desc&page=8';
$queryString = preg_replace(array('/&page=([0-9]+)/','/?page=([0-9]+)/'),array('',''),$queryString);

我的错误返回

Warning: preg_replace(): Compilation failed: nothing to repeat at offset 0

谁能看出我做错了什么?

【问题讨论】:

    标签: php preg-replace query-string


    【解决方案1】:

    这应该适合你:

    $queryString = '?order=stud_firstname&sort=desc&page=8';
    echo $queryString = preg_replace('/[&\?]page=([0-9]+)/', '',$queryString);
                                     //^^^^^^ See here '&' OR '?'
    

    有用的链接:

    Test your regex!

    regex cheat sheet

    【讨论】:

    • 太棒了!谢谢! :) 我会在 10 内打勾
    • @dpDesignz 不客气!祝你有美好的一天:D(顺便说一句:我用 2 个有用的链接更新了我的答案!)
    • 在字符类中不需要管道(或)。 [&\?] 已经表示该列表中的任何内容之一。您实际上只是将管道添加为可接受的字符,因此 |page=1 将匹配。它将在括号组中使用。 (&|\?) 是一样的。
    • @dpDesignz 请注意,如果您再次将问号添加到 url,删除问号可能会导致意外结果。
    • @dpDesignz :D 如果你在那里测试正则表达式并且你希望所有匹配项不仅 1 你必须将修饰符 g 添加到正则表达式 :D 但在 php 中它应该可以正常工作(只需悬停在问号上方一秒钟并阅读第一个修饰符,g 作为修饰符在 php 中的正常正则表达式中不存在,仅用于 regex101 进行测试)