1
  1. (\d+|)(\d+)?
  2. [\w\W][\d\D].

これらの通常の正規表現に違いはありますか? どちらを選ぶべきですか?

私はJavascriptを使用しています。

4

3 に答える 3

5

[\w\W][\d\D]dotall オプションがない JavaScript などの言語で使用されます。改行以外のすべてに一致するとは異なり、改行を含むすべての文字に一致します。.

   \w\W or \d\D   -> matches everything including newline characters
              .   -> matches everything except newline characters unless 
                     's' (dotall modifier) is specified 
(\d+|) or (\d+)?  -> matches 1 or more digits OR any position (null)
                     It could simply be written as '(\d*)'
于 2013-02-01T14:46:47.577 に答える
4

2 番目のものは非常に興味深いものであり、それについて何か言いたいことがあります。

  • [\w\W][\d\D]は同等であり、またと同等[\s\S]です。\Wは の補数文字セットで\wあり、同じことが - ペア および - ペア に適用\D\d\Sます\s。したがって、組み合わせると、例外なくどのキャラクターにも一致します。

    これらは通常、「例外なく任意の文字に一致する」という構造がない場合に使用されます。JavaScript はそのようなケースの一例です。JavaScript でこれを行うための、あまり知られていない非常に紛らわしい構造もありますが[^]、これは通常、他のフレーバーでは無効です。

  • ドット.は通常、任意の文字に一致します、改行\n. 言語によっては、さらに多くの文字が除外される場合があります。

    Javaの場合、、、、、\nおよびは除外さ\r\u0085ます。したがって、 aは次と同等です\u2028\u2029.[^\n\r\u0085\u2028\u2029]

    JavaScriptの場合、ドットは、、およびに加えて.除外されます。と同等です\r\u2028\u2029\n.[^\n\r\u2028\u2029]

    一部の言語には、例外なく.任意の文字に一致させるモードがあります。Java と Python ではモード、C# と Perlではモードと呼ばれます。DOTALLSingleLine

の動作は.言語によって異なります。一般に、「通常」モードで除外する必要があることに全員が同意し\nますが、さらに除外することを選択する点で若干異なる場合があります。

于 2013-02-01T14:48:02.173 に答える
2

どの言語を使用しているかは言われなかったので、Perl だと仮定します。

  1. (\d+|)と同等(\d*)です。0 個以上の数字のシーケンスに一致し、結果を に取り込み$1ます。(\d)?0 または 1 桁に一致します。数字と一致する場合は、それを$1;に入れます。そうでない場合は次の$1ようになります(を削除するundefように書き直すことができます)。(?:(\d)|)?

  2. [\w\W][\d\D]は同等で、任意の文字に一致します。.デフォルトでは と同等[^\n]です (改行以外の任意の文字に一致)。本当に任意の文字に一致させたい場合は、任意の文字に一致させるフラグを使用.して指定する必要があります。/s.

于 2013-02-01T14:48:59.947 に答える