perl 正则表达式 - 模式匹配

perl regex - pattern matching

谁能解释一下下面是做什么的?

 $name=~m,common/([^/]+)/run.*/([^/]+)/([^/]+)$,;
  • commonrun/ 自己匹配。
  • () 捕获。
  • [^/]+ 匹配 1 个或多个不是 /.
  • 的字符
  • .* 匹配 0 个或多个不是换行符的字符。[1]
  • $ 等同于 (\n?\z).[2]
  • \n 可选择匹配换行符。
  • \z匹配字符串结尾。

我认为它正在尝试匹配以下一种或两种形式的路径:

  • .../common/<em><strong>XXX</strong></em>/runYYY/<em><strong> XXX</strong></em>/<em><strong>XXX</strong></em>
  • 普通/<em><strong>XXX</strong></em>/runYYY/<em><strong>XXX</strong></em>/<em><strong>XXX</strong></em>

在哪里

  • XXX 是至少一个不包含 /.
  • 字符的序列
  • YYY 是不包含 /.
  • 的任意数量的字符序列(包括零)

然而,它匹配的不止这些。

  • 匹配不常见/<em><strong>XXX</strong></em>/runYYY/<em><strong>XXX</strong></em>/<em><strong>XXX</strong></em>
  • 匹配普通/<em><strong>XXX</strong></em>/runYYY/XXX/XXX/XXX/XXX/<em><strong>XXX</strong></em>/<em><strong>XXX</strong></em>

粗体部分被捕获(调用者可用)。


  1. 未使用 s 标志时。
  2. 未使用 m 标志时。