如何在 PHP 中为重写规则构建正则表达式?

我目前正在尝试为 WordPress 中的 url 编写重写规则。原始网址如下所示:


http://localhost/download/d0RqYU8xek9JOXBsQmJrRGpldWF2QT09/?selected_files%5B0%5D=TURUWEdaWWNtS1ZOd2NSY0MybThCQT09&selected_files%5B1%5D=cWhFVEtlOENNM0VwNmlrUlBmOVF1UT09

之后的第一个值/download/是特定文件存储的唯一标识符。之后,我添加了一系列文件。


在 WordPress 中,我现在想为此请求编写一个重写 URL,以便我可以在后端处理它。为此,我需要一个特定的正则表达式来识别请求并返回匹配项以构建我的重写 url:


public function filter_rewrite_rules_array( $rules ): array {

    $new_rules['download/([0-9][a-z][A-Z]+)/.......'] = admin_url( 'admin-ajax.php' ) . '?download=$matches[1]&selected_files=$matches[2]';

    return array_merge( $rules, $new_rules );

}

关键是我无法完成正则表达式....有人可以帮我解决这个问题吗?即使是第一场比赛也不行。


更新:


我期待这个 URL 结果:


http://localhost/admin-ajax.php?download=d0RqYU8xek9JOXBsQmJrRGpldWF2QT09&selected_files%5B0%5D=TURUWEdaWWNtS1ZOd2NSY0MybThCQT09&selected_files%5B1%5D=cWhFVEtlOENNM0VwNmlrUlBmOVF1UT09

正如我刚才看到的——请求可以有多个文件 ID。所以不知道如何使用正则表达式完成此操作。这可能吗?


收到一只叮咚
浏览 81回答 1
1回答

慕勒3428872

您可以尝试:.*?\/download\/(.*?)\/\?(.*)上述正则表达式的解释:.*?-懒惰地匹配之前的一切\download。\/download\/-/download/逐字匹配。(.*?)- 表示匹配您需要的唯一 ID 的捕获组,即在/? 懒惰之前匹配任何内容。(.*)- 表示匹配 url 其余部分的第二个捕获组。替换零件:由于零件http://localhost/admin-ajax.php?download=是静态的;您可以将它与捕获的组一起使用,即http://localhost/admin-ajax.php?download=$1&$2。您可以在此处找到上述正则表达式的演示。
打开App,查看更多内容
随时随地看视频慕课网APP