PHP 正则表达式 preg_match 识别 url 模式

PHP regex preg_match to identify url pattern

有没有办法让规则只允许示例 1 和 3 而不是全部 4 个?

/^(en\/|)([\d]{1,3})([-])(.+?)([\/])$/

示例:

  1. 12 个博客/
  2. 12-blog/blog2/
  3. en/12-blog/
  4. zh/12-blog/blog2/

https://www.phpliveregex.com/p/tFe

您可以为 en/ 使用可选部分,然后匹配 1-3 位数字,- 并使用取反字符 class 匹配非 / 1+ 次].

请注意,您可以省略 [\d][-][\/] 的方括号。如果您选择与 / 不同的分隔符,则不必转义正斜杠。

^(?:en/)?\d{1,3}-[^/]+/$

部分

  • ^ 字符串开头
  • (?:en/)? 可选匹配 en/
  • \d{1,3}匹配1-3位数字
  • -字面匹配
  • [^/]+/ 匹配除 /
  • 之外的任何字符 1+ 次
  • $ 字符串结束

Regex demo | Php demo