有人可以解释一下以下表达式
$input =~ m/\G".*?"(,|$)/gc || $input =~ m/\G[^,]*(,|$)/gc || die;
答案 0 :(得分: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
锚点在第二次尝试匹配时不会发生变化。{ {1}}修饰符为下一场比赛设置g
的位置 - 除其他外。)
答案 1 :(得分:0)
第一个意味着匹配引号之间的每个字符串(即/gc
),后跟逗号或字符串结尾。第二个意味着匹配任何零或更多的序列(即*
)非逗号字符(即[^,]
)。请注意,\G
修饰符表示每个新匹配必须在上一个匹配后立即开始。