次の正規表現がfalseを返すのは不思議です。「|」の間は見えません 一致しないはずです。何か案は?そして、パターンを「|」に一致させるにはどうすればよいですか?
Pattern pattern = Pattern.compile("([^\\*|\\\\|\\{|\\}|\\[|\\]|=|>|<])*");
boolean valid = pattern.matcher("|").matches();
前もって感謝します。
[^ ]
式は、角かっこで囲まれていない任意の文字と一致します。|
は角かっこで囲まれているため、一致しません。すべての文字(\
およびのようないくつかを除く]
)は、文字通り[^ ]
式内で使用されます。
私はあなたがこのようなことを言うつもりだったと思います:
([^*\\{}[\]=><])*
これは、これらの文字以外のものと一致します。
*\{}[]=><
文字列に入れるには、次のようにします。
"([^*\\\\{}[\\]=><])*"
正規表現の文字クラスの概念を誤解していると思います。後のすべての文字をメタ文字ではなく通常の文字として[^...]
扱います。したがって、クラス内に「OR」パイプは必要ありません。^
|
は|
文字クラスに存在し^
、セットを反転するために使用しているため、単一のパイプは正規表現と一致しません。
このプリントtrue
:
System.out.println(Pattern
.compile("([\\||^\\*|\\||\\{|\\}|\\[|\\]|=|>|<])*")
.matcher("|")
.matches());
しかし、他の場所のパイプファインダー \\||
(の代わり\\\\|
)は機能しません。
^
Kendall Frey が正規表現を乱す方法を説明します