如何合并此RegEx代码


How can I merge this RegEx code

我已经写了这个正则表达式代码,

/.[^.]*$/->文件扩展名

/'?.*/->删除所有内容?PHP 中的参数

当前用途:

preg_replace('/'?.*/', '', preg_replace('/.[^.]*$/','',basename($_SERVER['REQUEST_URI'])))

我如何才能调用一个preg_replace,而不是这两个,有没有办法将两个RegEx合并为一个RegEx来完成这项工作?

我可以公布预期的输出结果吗?对

http://localhost/books.php?tab=to_read

当我用两个preg_replace运行这个PHP代码时,我会得到"books">,我用它在菜单中突出显示,告诉用户当前页面和基于页面URI的菜单突出显示。

编辑:这段代码没有错,它很有效。但是,我想将这两个正则表达式合并为一个,并且只调用一个preg_replace

通常每个交替one|two只能组合两个模式。

在您的情况下,"文件扩展名"或查询字符串可能不存在,它们应该按正确的顺序匹配。这就是为什么你应该选择两个部分:

 preg_replace("~ ('.'w+)? ('?.*)?  $   ~x",
                    ↓       ↓      ↓    ↓
                  ".ext"  "?………"  END  readability flag

这样可以确保.ext直接位于查询字符串之前,或者跨越最后一个字符本身。同样,查询字符串也可以是可选的,但在没有前面扩展的情况下仍然应该匹配。