私はこれらの2つの正規表現の違いが何であるか知りたいです。プロとコンスは何ですか?PHPの正規表現の違い
入力の例(日付)31-12-2012。
Method A:
/(\d{2}-\d{2}-\d{4})/
そして:
Method B:
^[0-9]{2}[-/][0-9]{2}[-/][0-9]{4}\$
私はこれらの2つの正規表現の違いが何であるか知りたいです。プロとコンスは何ですか?PHPの正規表現の違い
入力の例(日付)31-12-2012。
Method A:
/(\d{2}-\d{2}-\d{4})/
そして:
Method B:
^[0-9]{2}[-/][0-9]{2}[-/][0-9]{4}\$
/
です。第2の区切り文字は区切り文字ではありません。今のところ、私はそれがコピー/ペーストの問題であると仮定します。^
という文字列の最初の項目として日付を強制します.Aは"a datestring anyw00-00-0000where in the string"
と一致します。()
でキャプチャしますが、Bはそのようなことを行いません。試合の全体が0
番目のアイテムとなるため、不要な()
が失われる可能性があります。\d
対[0-9]
→Avner's answerを参照してください。-
にのみ一致します。 -
が必要な場合に使用してください。 -
と/
の両方が必要な場合は、Bと同様に[-/]
を使用してください。$
で終わることを望んでいますが、Aではありません。適用されるものを使用してください。私は、これはコピー/ペーストエラー(それは正当な理由なく、二重引用符で囲まれた文字列であるため、$
がエスケープされている)であると仮定した場合、それが理由^regex$
固定するだけ日付をBマッチを行い、日付文字列のどこかで入力。もう一度、データに適用されるオプションを使用します。方法Bは、区切り文字のスラッシュだけでなく、ダッシュを受け入れます。そうでなければ、それらは同一です。
31/12-2012
または31-12/2012
を私は考えることができる唯一の詐欺は、それが長い文字列であるため、方法Bは、より多くのディスクスペースを取るということです。
また、方法Bが受け入れることに注意してください。
_それ以外は、same_ =>本当ですか?余分なスーパーは本当ですか? – Wrikken
\ dは[0-9]とほとんど同じです。私は、[0-9]のためには、より小さなパーシングが関与していると想像することができますが、これはごくわずかです。
そして、残っている唯一の違いは、方法Bも解析することである:
31/12/2012
を理論的には、\d
はちょうど[0-9]以上のものをキャッチする必要があります。それは理論的に[0-9](アラビア数字)と、Unicode標準が "数字"として含む他の数値形式をキャッチする必要があります。 これには、古代ギリシャ語とローマ数字、棒数、東アジア文字、不合理な数字、および16進数が含まれます。 Really。
実際には、ほとんどの正規表現パーサーは、私がテストしたいくつかのオンライン正規表現ツールからこれらを適切に処理しないと思います。
この正規表現は、(で包まれているので)
この宿題ですか? –
あなたは '\ d'と' [0-9] 'の違いの後に_only_ですか? (2)で '^'を始めると、最初にアンカーされるので(1の中には何もないので、テキストのどこかの日付がマッチします)、行末ではなく文字 '$'を意味する終了 '\ $' (\を取り除く)。私にとって非常に重要な違いです...また、キャプチャ( '()')と非キャプチャ、固定 ''デリミタまたはデリミタとして認識される ' - 'と '/'の両方.... – Wrikken
Bは、/ [0-9] {2} - [0-9] {2} - [0-9] {4}/'の方が望ましいでしょう。 – powtac