如何合并此RegEx代码

时间:2015-07-14 17:58:50

标签: php regex

我写过这个正则表达式代码,

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

/\?.*/ - >删除所有内容?PHP中的paramternames

当前用法:

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

如何将其转换为单个preg_replace调用,而不是这两个,是否有办法将两个RegEx合并为一个单一的RegEx来完成这项工作?

我可以发布预期的输出结果吗?是。

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

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

编辑:此代码没有任何问题,它有效。但是,我想将两个正则表达式合并为一个,只调用一个preg_replace。

1 个答案:

答案 0 :(得分:5)

通常,每次轮换one|two只能组合两种模式。

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

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

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