正規表現についての簡単な質問ですが、答えはわかりません。
数が正確に2回または4回連続して出現するかどうかを確認したい。どの構文を使用できますか?
\d{what goes here?}
試しました\d{2,4}
が、この表現は3桁も受け入れます。
正規表現についての簡単な質問ですが、答えはわかりません。
数が正確に2回または4回連続して出現するかどうかを確認したい。どの構文を使用できますか?
\d{what goes here?}
試しました\d{2,4}
が、この表現は3桁も受け入れます。
abc 123 xyz
どうしますか?それ12
は正確に2桁の数字なので、一致する必要がありますか?それとも、それ自体は2でも4でもない12
、より大きな数字列の一部なので、そうすべきではありません123
か?私が推測しなければならなかった場合、私はあなたが後者の振る舞いを望んでいると思いますが、それはあなたの質問から明らかではありません。例および/またはより明確な仕様が役立ちます。同じ質問abc 12345 def
...そこで何が起こるべきですか?
回答:
そのための特定の構文はありませんが、それを行う方法はたくさんあります。
(?:\d{4}|\d{2}) <-- alternation: four digits or two
\d{2}(?:\d{2})? <-- two digits, and optionally two more
(?:\d{2}){1,2} <-- two digits, times one or two
\d{2}(?:\d{2})?
すぐに解決策について考えただけでした-これらの素晴らしいバリエーション-特に、最後の解決策は非常に素晴らしく、スケーラブルに見えます。
(?:
これの使用を理解していない人は、「非キャプチャグループ」(replaceステートメントで参照されることを意図していないグループ)を開始します。括弧を使用することもできますが、これによりキャプチャグループが作成されます。詳細はこちら:stackoverflow.com/questions/3512471/non-capturing-group
"333"
。「完全な文字列が一致するかどうかをチェックする」機能ではなく、正規表現ライブラリの「一致する部分文字列を見つける」機能を誤って使用している可能性があります。そのドキュメントを参照してください。
(?<!\d)(\d{2}|\d{4})(?!\d)
これが正しい方法です。受け入れられた答えは間違っています。
3桁(または5)に一致します。私の目ではそれは間違っています。
1)2桁または4桁のシーケンスの前、または2桁または4桁のシーケンスの後に桁がないことを確認します。
(<!)
構文は否定的な後読みです
(?!)
構文は否定先読みです。
上記はミッドストリングで機能します:
検索文字列は、その周りにはコンテンツがありません場合は、使用することができます^
し、$
起動して、文字列アンカーの終わり:
^\d{4}$|^\d{2}$
(?<!\d)(\d{2}|\d{4})(?!\d)
^\d{4}$|^\d{2}$
それを修正する潜在的な方法になるでしょう。ように^\d{2}(?!\d)|^\d{4}(?!\d)