1

次のような文字列があります。

"1132","Fredricks, Ben","Boulder,         CO","x755593"

そして、私は一致すべきではないと思った次の正規表現を持っています:

^"\d+",".*?","[^,]+"

ただし、文字列全体に一致します。[^,]+つまり、「引用符までのコンマ以外のすべてに一致すると思います...一致が失敗する原因になると思いますか?一致しないと思われるコンマに遭遇しました。

私の質問だと思います...なぜこれが一致するのですか? コンマを持たない引用符の 3 番目のセット内のものを見つけようとしています。

4

2 に答える 2

3

?inは.*?、一致を非貪欲にするだけです。それがなければ、パターンは残りを一致させながら可能な限りキャプチャします。おそらく、そのパターンが全体で一致するのを避けるために追加されましたが、それを防ぐ"ことはできません。キャプチャされた文字列を見ると (一致した場合などに一致が含まれている場合) 、予想よりもはるかに多く一致していることがわかります(複数のフィールド)。"(\d+)"$1.*?

于 2012-07-17T21:33:59.180 に答える
1

代わりに間隔式を使用する

レコードの最初の 3 つのフィールドをキャプチャしようとしているだけの場合は、次のように動作します。

^"\d+"(,"[^"]+?"){2}

例えば:

$ echo '"1132","Fredricks, Ben","Boulder,         CO","x755593"' | 
    pcregrep --only-matching '^"\d+"(,"[^"]+?"){2}'
"1132","Fredricks, Ben","Boulder,         CO"
于 2012-07-17T21:36:54.743 に答える