【问题标题】:PHP preg_match any text in a url after a specific word already in the urlPHP preg_match URL 中已有特定单词之后的任何文本
【发布时间】:2019-03-23 05:46:19
【问题描述】:

我正在使用 preg_match 将 joomla 模块插入到包含单词“类别”的任何 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']))

【问题讨论】:

  • 在我看来像你。不妨使用 strpos
  • 你可以试试这个正则表达式\/category\/?
  • 如果/category/ 之后有某些内容,但当URI 以category/ 结尾时,您希望包含模块ONLY,这是真的吗?

标签: php preg-match


【解决方案1】:

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

这是一种方式:

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

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

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

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

~/category/[^?#]~

【讨论】:

  • 如果您是 Joomla 开发人员,请通过 Joomla Stack Exchange 加入我们。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-10-05
  • 1970-01-01
  • 1970-01-01
  • 2021-11-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多