perl - perl 正则表达式 - 模式匹配
问题描述
谁能解释下面正在做什么?
$name=~m,common/([^/]+)/run.*/([^/]+)/([^/]+)$,;
解决方案
common
,run
并且/
与自己匹配。()
捕获。[^/]+
匹配 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
粗体部分被捕获(调用者可用)。
s
不使用标志时。m
不使用标志时。