有人可以解释一下这个正则表达式吗?

3
请问有人能帮我解释一下以下表达式的含义吗?
$input =~ m/\G".*?"(,|$)/gc || $input =~ m/\G[^,]*(,|$)/gc || die;

2
哪个?你不理解哪一部分? - Quentin
2个回答

9

这里有两个正则表达式。第一个是:

\G    # the end of the previous match
".*?" # something in quotes
(,|$) # and a comma, or the end of the string

第二个将在第一个失败后进行匹配:
\G    # the end of the previous match
[^,]* # anything up to the next comma or end of string
(,|$) # and then a comma, or the end of the string

我的猜测是这两个正则表达式旨在匹配可以带引号或不带引号的内容,并且逗号后可能会跟随一些其他项目。
(“c”修饰符意味着如果匹配失败,则保留当前位置,因此如果第一次尝试匹配失败,则“\G”锚不会改变。 “g”修饰符为下一次匹配设置了“\G”的位置- among other things.)

0

第一个意思是匹配在引号之间的每个字符串(这是/gc),后面跟着逗号或字符串结束。第二个意思是匹配零个或多个(这是*)非逗号字符序列(这是[^,])。请注意,\G修饰符意味着每个新匹配必须从前一个匹配之后开始。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接