while ($aaa =~ m/= "(D.*?)"/g)
我认为它匹配,而$aaa
像anything = "something"
,它返回something
(没有引号)。
但是这段代码是什么意思?
m/= "(D.*?)"/
你似乎已经弄明白了大部分。=
、和
()
都从字面上匹配这些字符。$1
捕获匹配字符串的一部分,并使其作为D
可用。括号内的部分匹配一个非数字字符(*?
),后跟零个或多个(.
)非换行字符("
),直到*
。"
也会匹配0次或多次,但更喜欢匹配更多的字符,所以最终会匹配到字符串中的最后一个*?
,而不是像D
那样匹配下一个。
所有这些都在perlre中有记录。
等号和引号是按字面意思理解的,.*?
表示任何非数字,CC_17后面跟着或不跟着任何类型的零个或多个字符。
从左到右:
m/= "(D.*?)"/g
match operator,
start regex:
equals sign, whitespace, double quotation mark,
start group:
one non-digit character, zero or more characters,
end group,
double quotation mark,
end regex
match globally