请解释指定Perl正则表达式pattern matching匹配语句的作用
Perl正则匹配语句解释
你给出的Perl语句如下:
$name =~ m,common/([^/]+)/run.*/([^/]+)/([^/]+)$,;
基础语法说明
- Perl中
m//是正则匹配操作符,这里用逗号,替代了默认的斜杠/作为分隔符,避免正则里大量出现/时需要反复转义的问题,效果和m/.../完全一致。 - 这个匹配操作会对变量
$name存储的字符串做正则校验,匹配成功后会把括号里捕获的内容分别存入内置变量$1、$2、$3中。
正则拆分解析
逐段解释正则common/([^/]+)/run.*/([^/]+)/([^/]+)$的含义:
common/:固定匹配字符串开头的common/字符片段([^/]+):第一个捕获组,[^/]表示匹配除了斜杠/之外的任意字符,+表示至少匹配1个,也就是捕获common/之后第一个路径片段的内容,会存入$1/run:固定匹配接下来的/run字符片段.*:匹配任意数量的任意字符(默认不包含换行符),会一直匹配到后续规则满足的位置/([^/]+):第二个捕获组,匹配接下来的斜杠之后的非斜杠路径片段,内容存入$2/([^/]+)$:第三个捕获组,匹配最后一个斜杠之后到字符串末尾的非斜杠路径片段,内容存入$3,$表示匹配字符串的结尾,确保最后一段是路径的最后一级。
实际作用示例
举个例子,如果$name的内容是common/app1/run/env/prod/serviceA,那么匹配成功后:
$1 = app1$2 = prod$3 = serviceA
简单来说,这段正则是用来提取符合common/xxx/run开头的路径里的三个指定路径片段:common后的第一级目录、整个路径的倒数第二级目录、整个路径的最后一级目录。
内容的提问来源于stack exchange,提问作者Zazy
相关产品推荐
相关产品推荐

