PHP preg_match在url中已有特定单词后的url中的任何文本

问题描述 投票:1回答:1

我正在使用preg_match将joomla模块插入到包含单词“category”的任何url中的模板中。

一个示例网址是:xyz.com/page/category/

我的代码是:

if(preg_match('/category/',$_SERVER['REQUEST_URI']))
echo '<jdoc:include type="modules" name="form" style="xhtml" />';

我已经意识到我需要将模块插入仅出现在“类别”之后的URL中的页面。

例如:xyz.com/page/category/123-page-after-category

我尝试了以下但它不起作用:

if(preg_match('/category/?.*',$_SERVER['REQUEST_URI']))
php preg-match
1个回答
0
投票

如果只需要在/category/之后有字符时才评估为true,那么你需要使量词“一个或多个”(+)而不是“零或更多”(*)。实际上,你只需要检查/category/之后是否有一个字符,所以“任意字符”都是非可选的。

这是一种方式:

if (preg_match('~/category/.~', $_SERVER['REQUEST_URI'])) {

请记住,正则表达式模式需要在php中使用“模式分隔符”。这次我用过波浪线。您的第一个模式被正则表达式引擎解释为category,并将斜杠视为分隔符 - 这意味着您可以匹配“scategory-boardgame”。

如果您需要不区分大小写的匹配,请在第二个波形符号后写入i。 (图案修饰符)

如果你需要确保/category/后面的字符不是查询字符串或网址的锚点部分,你可以过滤掉?#

~/category/[^?#]~
© www.soinside.com 2019 - 2024. All rights reserved.