【问题标题】:preg_match wildcard, require at least one characterpreg_match 通配符,至少需要一个字符
【发布时间】:2016-11-24 14:26:41
【问题描述】:

下面的 preg_match 将“空”(0 个字符)与通配符匹配。我想禁用它:

preg_match('/site.com\/subsection\/.*?/', $page_url);

所以上面的内容应该匹配 site.com/subsection/subpage,但不应该匹配根目录 site.com/subsection/

如何调整上面的正则表达式?提前致谢!

【问题讨论】:

  • 试试'/site\.com\/subsection\/.+/'

标签: php regex preg-match


【解决方案1】:

模式末尾的.*? 匹配空字符串。您需要使用.+ 使其匹配一个或多个字符:

'/site\.com\/subsection\/.+/'
                         ^

现在,site.com/subsection/ 之后至少需要 1 个字符。

请注意,点必须转义以匹配文字点。

此外,如果模式本身中有许多斜杠,则使用/ 以外的正则表达式分隔符(正如OcuS 在下面的comments 中建议的那样)可能是个好主意。我通常使用波浪号:

'~site\.com/subsection/.+~'

【讨论】:

  • 谢谢,这似乎有效!允许时接受您的回答。
  • 通过选择不同的分隔符而不是 / 来节省一些字符。像@site\.com/subsection/.+@ 这样的东西。恕我直言,它还增加了可读性。
猜你喜欢
  • 2013-05-27
  • 2016-06-04
  • 2011-07-21
  • 2016-06-29
  • 2015-08-12
  • 2014-06-17
  • 2013-05-29
  • 2021-01-26
  • 2019-06-14
相关资源
最近更新 更多