首页 > 解决方案 > perl 正则表达式 - 模式匹配

问题描述

谁能解释下面正在做什么?

 $name=~m,common/([^/]+)/run.*/([^/]+)/([^/]+)$,;

标签: perl

解决方案


  • commonrun并且/与自己匹配。
  • ()捕获。
  • [^/]+匹配 1 个或多个不是/.
  • .*匹配 0 个或多个不是换行符的字符。[1]
  • $等价于 ( \n?\z)。[2]
  • \n可选地匹配换行符。
  • \z匹配字符串的结尾。

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

  • .../common/XXX/runYYY/XXX/XXX
  • common/XXX/runYYY/XXX/XXX

在哪里

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

然而,它的匹配度远不止于此。

  • 它匹配uncommon/XXX/runYYY/XXX/XXX
  • 它匹配common/XXX/runYYY/XXX/XXX/XXX/XXX/XXX/XXX

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


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

推荐阅读