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

PHP preg_match any text in a url after a specific word already in the url

我正在使用 preg_match 将 joomla 模块插入到包含单词 'category'.

的任何 url 中的模板中

一个例子url是:xyz.com/page/category/

我的有效代码是:

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

我意识到我需要将模块插入到仅出现在 'category' 之后的 url 的页面中。

例如:xyz.com/page/category/123 页分类后

我尝试了以下方法,但没有用:

if(preg_match('/category/?.*',$_SERVER['REQUEST_URI']))

如果你只需要在/category/之后有字符的情况下评估为true,那么你需要使量词"one or more"(+)而不是"zero or more"( *)。事实上,你只需要检查/category/之后是否有一个字符,所以让"any character"不可选。

这是一个方法:

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

请记住,正则表达式模式在 php 中需要 "pattern delimiters"。这次我用了代字号。您的第一个模式被正则表达式引擎解释为 category,并将斜线视为定界符——这意味着您可能一直在匹配 "scategory-boardgame".

如果需要不区分大小写的匹配,请在第二个波浪号后写i。 (模式修饰符)

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

~/category/[^?#]~