134

次の正規表現について考えてみます。ここで、X任意の正規表現です。

X{n}|X{m}

この正規表現は、正確にまたは何度X発生するかをテストします。 nm

X発生を正確にnまたは何度もテストできる正規表現の数量詞はありmますか?

4

6 に答える 6

107

「正確に m 回または n 回」を意味する単一の量指定子はありません。あなたのやり方は大丈夫です。

別の方法は次のとおりです。

X{m}(X{k})?

ここでm < nkは の値ですn-m

于 2012-12-14T08:10:58.373 に答える
90

量指定子の完全なリストは次のとおりです (参照http://www.regular-expressions.info/reference.html )。

  • ?, ??- 0 回または 1 回の出現 (??怠け者、?貪欲)
  • **?- 任意の数の出現
  • ++?- 少なくとも 1 回出現
  • {n}- 正確にn出現
  • {n,m}-発生nまでm、包括的
  • {n,m}?-出来事nm、怠け者
  • {n,}{n,}?- 少なくともn出現

「正確に N または M」を取得するには、m、n が特別でない限り、量化された正規表現を 2 回記述する必要があります。

  • X{n,m}もしもm = n+1
  • (?:X{n}){1,2}もしもm = 2n
  • ...
于 2012-12-14T08:16:33.803 に答える
19

いいえ、そのような数量詞はありません。しかし、バックトラッキングの問題/X{m}(X{m-n})?/を防ぐために再構築します。

于 2012-12-14T08:12:45.900 に答える
4

TLDR;(?<=[^x]|^)(x{n}|x{m})(?:[^x]|$)

「xn 回」または「xm 回」が必要なようです。正規表現への直訳は次のようになると思い(x{n}|x{m}). ますhttps://regex101.com/r/vH7yL5/1

または、m 個を超える "x" のシーケンスを持つことができる場合 (m > n と仮定)、「"x" の後に続かない」と「"x" の後に続かない」を追加できます[^x](x{n}|x{m})[^x]。 「x」の前後に常に文字があると仮定します。ここでわかるように: https://regex101.com/r/bB2vH2/1

に変更して(?:[^x]|^)(x{n}|x{m})(?:[^x]|$)、「「x」がないか、行頭に続く」および「「x」がないか、行末が続く」に変換できます。ただし、ここでわかるように、間に 1 文字しかない 2 つのシーケンスには一致しません (最初の一致では後に文字が必要で、2 番目の一致では前に文字が必要になるため): https://regex101.com/r/ oC5oJ4/1

最後に、1 文字離れた一致に一致させるには、「no 'x' after」に正のルック アヘッド (?=) を追加するか、「no 'x' before」にポジティブ ルック ビハインド (?<=) を追加します。このように: https://regex101.com/r/mC4uX3/1

(?<=[^x]|^)(x{n}|x{m})(?:[^x]|$)

このようにして、必要な「x」の正確な数だけを一致させます。

于 2016-07-07T16:03:10.090 に答える