1

次の正規表現がfalseを返すのは不思議です。「|」の間は見えません 一致しないはずです。何か案は?そして、パターンを「|」に一致させるにはどうすればよいですか?

Pattern pattern = Pattern.compile("([^\\*|\\\\|\\{|\\}|\\[|\\]|=|>|<])*");
boolean valid = pattern.matcher("|").matches();

前もって感謝します。

4

3 に答える 3

2

[^ ]式は、角かっこで囲まれていない任意の文字と一致します。|は角かっこで囲まれているため、一致しません。すべての文字(\およびのようないくつかを除く])は、文字通り[^ ]式内で使用されます。

私はあなたがこのようなことを言うつもりだったと思います:

([^*\\{}[\]=><])*

これは、これらの文字以外のものと一致します。

*\{}[]=><

文字列に入れるには、次のようにします。

"([^*\\\\{}[\\]=><])*"
于 2012-07-06T12:54:37.757 に答える
1

正規表現の文字クラスの概念を誤解していると思います。後のすべての文字をメタ文字ではなく通常の文字として[^...]扱います。したがって、クラス内に「OR」パイプは必要ありません。^|

|文字クラスに存在し^、セットを反転するために使用しているため、単一のパイプは正規表現と一致しません。

于 2012-07-06T12:54:43.517 に答える
0

このプリントtrue:

 System.out.println(Pattern
            .compile("([\\||^\\*|\\||\\{|\\}|\\[|\\]|=|>|<])*")
            .matcher("|")
            .matches());

しかし、他の場所のパイプファインダー \\||(の代わり\\\\|)は機能しません。

^Kendall Frey が正規表現を乱す方法を説明します

于 2012-07-06T13:25:41.420 に答える