我有一个字符串,如下所示:
"1132","Fredricks, Ben","Boulder, CO","x755593"
我有以下正则表达式,我认为不应该匹配:
^"\d+",".*?","[^,]+"
但它匹配整个字符串。不应该[^,]+
这意味着,我认为"匹配所有不是逗号的东西直到引号...导致匹配失败?它遇到了一个我认为会使它不匹配的逗号。
我想我的问题是......为什么这匹配?我试图在第三组引号中找不到逗号的内容。
答案 0 :(得分:3)
?
中的.*?
只会使匹配非贪婪。没有它,模式将尽可能多地捕获,同时仍然匹配其余模式。可能会添加它以避免在"
上匹配该模式,但它不会阻止它。如果您查看了捕获的字符串(如果您匹配"(\d+)"
等,以便$1
包含匹配项),您会发现.*?
匹配的内容比您预期的多(多个字段)。< / p>
答案 1 :(得分:1)
如果您只是想捕获记录的前三个字段,则以下内容将起作用:
^"\d+"(,"[^"]+?"){2}
例如:
$ echo '"1132","Fredricks, Ben","Boulder, CO","x755593"' |
pcregrep --only-matching '^"\d+"(,"[^"]+?"){2}'
"1132","Fredricks, Ben","Boulder, CO"