谁能解释我这个正则表达式

时间:2012-02-29 09:23:54

标签: regex perl

有人可以解释一下以下表达式

$input =~ m/\G".*?"(,|$)/gc || $input =~ m/\G[^,]*(,|$)/gc || die;

2 个答案:

答案 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修饰符表示每个新匹配必须在上一个匹配后立即开始。