0

IRCPRIVMSG文字列をマッハする正規表現を作成しようとしています。それは次のようなものです:

:nick!name@some.host.com PRIVMSG #channel :message body

だから私は次のコードを書いた:

Pattern pattern = Pattern.compile("^:.*\\sPRIVMSG\\s#.*\\s:");
Matcher matcher = pattern.matcher(msg);

if(matcher.matches()) {
    System.out.println(msg);
}

それは動作しません。一致しませんでした。オンラインのJavaScriptテスターを使用して正規表現をテストすると、一致するものが得られました。

理由、機能しない理由を見つけようとしましたが、空白記号に問題があることがわかりました。次のパターンは私にいくつかの一致を与えるでしょう:

Pattern.compile("^:.*");

ただし、\sを含むパターンは次のようにはなりません。

Pattern.compile("^:.*\\s");

ややこしい。

4

2 に答える 2

1

javamatchesメソッドが再び実行されます!このメソッドは、文字列全体が入力と一致する場合にのみtrueを返します。2番目のコロンの後にメッセージ本文をキャプチャするものを含めなかったため、文字列全体が一致しません。入力のいずれかの部分が一致する場合、「通常の」正規表現は「一致」であるため、テスターで機能します。

Pattern pattern = Pattern.compile("^:.*?\\sPRIVMSG\\s#.*?\\s:.*$");

一致する必要があります

于 2012-05-09T18:04:37.813 に答える
0

matches()のドキュメントを見ると、uouは文字列全体を照合しようとしていることに気付くでしょう。正規表現を修正するか、使用find()して部分文字列の一致を反復処理する必要があります。

于 2012-05-09T18:04:56.033 に答える