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