9

Java の正規表現に問題があります。

この正規表現を使用しようとすると:

 ^(?:(?:([01]?\d|2[0-3]):)?([0-5]?\d):)?([0-5]?\d)$  

次のエラーが表示されます

"Invalid escape sequence (valid ones are \b \t \n \f \r \" \' \ )"  

そのエラーを処理する方法がわかりません。バックスラッシュを二重にしようとしましたが、うまくいきませんでした。誰かがこれで私を助けてくれることを願っています。

ありがとう

4

3 に答える 3

11

これはうまくいくはずです^(?:(?:([01]?\\d|2[0-3]):)?([0-5]?\\d):)?([0-5]?\\d)$

その理由は、エラー メッセージにリストされている記号には特別な意味がありますが、\dを使用するために定義された特別な記号の 1 つではないためです。これは、(記号の前に\エクストラを追加して) エスケープする必要があることを意味します。\

于 2013-04-23T20:55:15.070 に答える
7

Java で正規表現を記述するときは常に\、正規表現を定義する文字列で使用されている文字をエスケープすることを忘れないでください。つまり、正規表現に one が含まれている場合は、\two を記述する必要があります\\。たとえば、コードは次のようになります。

^(?:(?:([01]?\\d|2[0-3]):)?([0-5]?\\d):)?([0-5]?\\d)$  

なぜ聞くの?Java の文字列で\は、 は特殊文字 (例: タブ、改行など) を表すために使用されるエスケープ文字であり、文字列に が含まれている場合は、その前に\別の文字を追加して、それ自体をエスケープする必要が\あるためです。したがって、\\.

記録として、有効なエスケープ文字とその意味をリストした Java 言語仕様ページを次に示します。最後の文字に注目してください

\b  backspace
\t  horizontal tab
\n  linefeed
\f  form feed
\r  carriage return
\"  double quote
\'  single quote
\\  backslash
于 2013-04-23T20:57:42.463 に答える
1

find / で notepad++ を使用し、// で置き換えることができます

于 2016-10-08T05:02:09.237 に答える