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