我写过这个正则表达式代码,
/.[^.]*$/
- >文件扩展名
/\?.*/
- >删除所有内容?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。
答案 0 :(得分:5)
通常,每次轮换one|two
只能组合两种模式。
在您的情况下,“文件扩展名”或查询字符串可能不存在,并且应按正确的顺序进行匹配。这就是为什么你应该选择两个部分:
preg_replace("~ (\.\w+)? (\?.*)? $ ~x",
↓ ↓ ↓ ↓
".ext" "?………" END readability flag
这可确保.ext
直接位于查询字符串之前,或跨越最后一个字符本身。同样,查询字符串可以是可选的,但仍然可以在没有前面的扩展名的情况下匹配。