2013-08-01 12 views
7

私は(はここだけの典型的なトークンである)次の正規表現の数量詞を理解しようとしています:{n}はどうですか?と{n}は違うのですか?

a{n}? 

どのように疑問符は、上記の式の試合に影響しますか?そしてそれは次の点とどう違うのですか?

a{n} 

私は、例えばaaaaaの両方にマッチするパターンaa{1}?aを期待しているだろう。 aaaと一致していますが、aaではなく、と一致しています。 a(a{1})?aのパターンは両方に一致しているので、かっこで違いがあります。


注:両方のためのMSDNの記事Quantifiers in Regular Expressions状態:

It is the lazy counterpart of the greedy quantifier {n}+.

+1

これはC#と何が関係していますか? –

+0

@AustinHenleyは、彼がC#Regexのコンテキストでのみそれを意味するかもしれません。 – TheVillageIdiot

+0

疑問符は変数をnullにすることができます。 – Max

答えて

7

何も{n}?については

The {n} quantifier matches the preceding element exactly n times, where n is any integer.

、それは次のよう、過度に有用ではない部分を追加します。記事の状態:

The {n} quantifier matches the preceding element exactly n times, where n is any integer. {n} is a greedy quantifier whose lazy equivalent is {n}?.

The {n}? quantifier matches the preceding element exactly n times, where n is any integer. It is the lazy counterpart of the greedy quantifier {n}+.

本文は完全に同じです。基本的にはを追加しますか?は量子の動作を変更しません。 .NETの正規表現エンジンは、{n}の代わりに{n}?をサポートしているようです。


興味深いことに、この記事では、エラーが含まれているように見えるん:

The {n,} quantifier matches the preceding element at least n times, where n is any integer. {n,} is a greedy quantifier whose lazy equivalent is {n}?.

これは間違っています。 {n,}の遅延遅延は、{n,}?であり、ではなく、であり、{n}?と同じです。

+0

'{n、?}'と '{n、m}? 'も存在するので、疑問符(' {n}?')を持つバージョンは完全性のためにのみ実装(および文書化)されています。 –

+1

@マリアス・シュルツはい、そうです。この記事では、 '{n}?'それを' {n} 'で置き換えると、そのコードは同じように動作します。 –

+8

問題に直面したときに「私が知っている、私は正規表現を使用する」と思う人もいます。今は '{n}? 'という問題があります。 –

関連する問題