回答:
量指定子の完全なリストは次のとおりです(http://www.regular-expressions.info/reference.htmlを参照):
?
、??
-0または1回の出現(??
怠惰、?
貪欲)*
、*?
-任意の数の発生+
、+?
-少なくとも1つの発生{n}
-正確にn
発生{n,m}
- n
のm
発生箇所、包括的{n,m}?
-発生n
するm
、怠惰な{n,}
、{n,}?
-少なくともn
発生「正確にNまたはM」を取得するには、m、nが特別でない限り、定量化された正規表現を2回記述する必要があります。
X{n,m}
もし m = n+1
(?:X{n}){1,2}
もし m = 2n
?:
ifのm = 2n
例でなぜ必要なのですか?私にとっては、それなしで問題なく動作するようです。
?:
、グループはキャプチャグループになります。正規表現エンジンが必要としないものを記憶することは別として、このグループの後にキャプチャグループがある場合、それらのIDは変更されます。置換に正規表現を使用する場合は、置換を調整する必要があります。
いいえ、そのような数量詞はありません。ただし、バックトラックの問題/X{m}(X{m-n})?/
を防ぐために再構成します。
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'がない、または行の終わりが続く」に変換できます。しかし、それでも、https://regex101.com/r/を見るとわかるように、2つのシーケンスの間に文字が1つだけある場合は一致しません(最初の一致の後には文字が必要で、2番目の文字はその前にあるため)。 oC5oJ4 / 1
最後に、1文字の遠い一致に一致させるには、「後の「x」なし」に前向きの肯定(?=)を追加するか、「前の「x」前」に後ろ向きの肯定(?<=)を追加します。このように:https : //regex101.com/r/mC4uX3/1
(?<=[^x]|^)(x{n}|x{m})(?:[^x]|$)
このようにして、必要な「x」の正確な数のみを照合します。
Enhardenedの回答を見ると、最後から2番目の表現は、間に1文字しかないシーケンスとは一致しないと述べています。先読み/後読みを使用せずにこれを修正する簡単な方法があります。これは、開始/終了文字を境界文字に置き換えることです。これにより、開始/終了を含む単語の境界と照合できます。したがって、適切な式は次のようになります。
(?:[^x]|\b)(x{n}|x{m})(?:[^x]|\b)
あなたがここで見ることができるように:https : //regex101.com/r/oC5oJ4/2。
非常に古い投稿ですが、役立つかもしれないsthを寄稿したいと思います。私は質問で述べたとおりに試してみましたが、うまくいきますが、落とし穴があります。数量の順序が重要です。このことを考慮:
#[a-f0-9]{6}|#[a-f0-9]{3}
これにより、16進数のカラーコード(3桁または6桁の長さ)がすべて検出されます。でもこのようにひっくり返すと
#[a-f0-9]{3}|#[a-f0-9]{6}
3桁の数字、または6桁の数字の最初の3桁のみが検索されます。これは理にかなっており、正規表現のプロはこれをすぐに見つけるかもしれませんが、多くの人にとってこれは独特の振る舞いかもしれません。順序に関係なくこのトラップを回避できるいくつかの高度なRegex機能がありますが、すべてのユーザーがRegexパターンに精通しているわけではありません。
X
は、一般的なm
で得られる最高のものですn
。