0

私は次の文字列を持っています:

String s = "http://www.[VP_ANY].com:8080/servlet/[VP_ALL]";

この文字列に[VP_ANY]o[VP_ALL]という単語が含まれているかどうかを確認する必要があります。私はこのようなもの(および多くの組み合わせ)を試しましたが、機能しません:

Pattern.compile("\b(\\\\[VP_ANY\\\\]|\\\\[VP_ALL\\\\])\b").matcher(s).matches()

私は何が間違っているのですか?

私は次のことを試しました:

s ="www。[VP_ANY].com:8080 / servlet / [VP_ALL]";

System.out.println(Pattern.compile( "\ [VP_ANY \]")。matcher(s).matches());

System.out.println(s.replaceAll( "\ [VP_ANY \]"、 "A"));

最初の「System.out」はfalseを返し、2番目の「System.out」は置換を正しく返します。

「[」と「]」の文字を2つの円記号でエスケープしていますが、投稿を保存すると1つだけが表示されます。しかし、私は2を使用しています...

4

4 に答える 4

1
Pattern.compile("\b(\\\\[VP_ANY\\\\]|\\\\[VP_ALL\\\\])\b").matcher(s).matches()
String s = "http://www.[VP_ANY].com:8080/servlet/[VP_ALL]";
                      ^^      ^^                ^^      ^
                      NoWB    NoWB              NoWB    WB

.と、 と 、 と の[].と の間/に境界線という単語がないため、正規表現は機能しません[

さらに、エスケープが間違っていると思います。単語の境界にはバックスラッシュが必要であり、他の2つは少なくなります。

したがって、単語の境界が機能していないため、問題ないはずです

Pattern.compile("\\[VP_(?:ANY|ALL)\\])")
于 2012-05-22T13:11:56.090 に答える
0

これを試して

\[VP_ANY\]|\[VP_ALL\]

私のJavaへの取り組み

try {
    boolean foundMatch = "www.[VP_ANY].com:8080/servlet/[VP_ALL]".matches("\\[VP_ANY\\]|\\[VP_ALL\\]");
} catch (PatternSyntaxException ex) {
    // Syntax error in the regular expression
}
于 2012-05-22T12:56:44.543 に答える
0

これを試してみてください

try {
    boolean foundMatch = subjectString.matches("(?i)\\bVP_(?:ANY|ALL)\\b");
} catch (PatternSyntaxException ex) {
    // Syntax error in the regular expression
}

またはこれ

try {
    boolean foundMatch = subjectString.matches("(?i)\\[VP_(?:ANY|ALL)\\]");
} catch (PatternSyntaxException ex) {
    // Syntax error in the regular expression
}
于 2012-05-22T12:57:07.983 に答える
0
"http://www.[VP_ANY].com:8080/servlet/[VP_ALL]".replaceAll ("http://www.(\\[VP_ANY\\]).com:8080/servlet/(\\[VP_ALL\\])", "$1:$2")
res117: java.lang.String = [VP_ANY]:[VP_ALL]

リテラル [ を探している場合は、それをマスクする必要があります。マスクしないと、[AZ] のようなグループを意味します。

実行時にファイルまたは JTextField から正規表現を読み取れば、それだけです。しかし、ソースコードにそれを書くと、コンパイラは \ を見て、それを一般的なマスキングとして扱います。

char apo = '\''; 
String quote = "He said: \"Whut?\"";

のみ"\\"を意味するため、再度マスクする必要があります"\"

そのため、開発時にあまり混乱しないように、正規表現をテストするための 2 つまたは 3 つのテキストフィールドを備えた単純な GUI アプリを用意することをお勧めします。成功した場合は、別のレベルのマスキングを追加するだけで済みますが、それらを開発するには、この 2 番目のレベルを遠ざけることができます。

Divide et impera、古代ローマのプログラマーが私たちに言ったように。

于 2012-05-22T13:04:33.920 に答える