はI現在、1から12までの入力を表すために(許可されていない先頭のゼロを。)([1-9]|1[0-2])
を使用してい正規表現の番号範囲(1から12など)を表す方法は?
しかし、それはむしろ思わハック、およびいくつかの日に、それは、あからさま汚いを探します。
☞それにはが適切ですか?がありますか?
☞番号範囲を表す他の方法は何ですか?
はI現在、1から12までの入力を表すために(許可されていない先頭のゼロを。)([1-9]|1[0-2])
を使用してい正規表現の番号範囲(1から12など)を表す方法は?
しかし、それはむしろ思わハック、およびいくつかの日に、それは、あからさま汚いを探します。
☞それにはが適切ですか?がありますか?
☞番号範囲を表す他の方法は何ですか?
を得ることはありませんここではほとんど違いはありませんが、[2-9]|1[0-2]?
のような形式でバックトラックを回避します。私は正規表現はそれらをうまく処理することができますが、そのような "あいまいさ"を避けるためにXMLスキーマによって調整されてきました。
基本的に、マッチャーが "1"文字を見るとき、 "意味"はより多くの文字を見るまで曖昧です。 [1-9]は「1」、1 [0-2]は「1」ですか?正規表現は意味を気にしませんが、あいまいさが解消されるまで、正規表現では両方のブランチをアクティブにしなければならないので、それは効率的な問題です。 – xan
正規表現のマシンでは、これが最も速い解決策であると言っています:1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12? – Pacerier
いいえ、私は '[2-9]と' 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9'を比較しません - どちらが速いのか分かりません。私は '1 | 10'と' 10? 'を比較しています。そのような簡単な例では問題はありませんが、より多くの関与する正規表現に対しては、共通の接頭辞を削除するのに役立ちます。おそらくもっと良い例: 'ab | ac'は' a(b | c) 'に改善されました。 – xan
あなたが使用することができます。
[1-9]|1[012]
「大きい方が良い」の場合、(1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12) – Ingo
@Ingoは、 – Pacerier
の前に私の思考を越えていなかったことを率直に言っていますが、それは何らかの意味で最も単純な解決策であり、あなたがおそらく望むものについてのヒントを与えます。 – Ingo