我正在尝试编写一个正则表达式来处理IRC PRIVMSG字符串。就像这样:

: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");


令人困惑。

最佳答案

Java matches方法再次触发!仅当整个字符串与输入匹配时,该方法才返回true。在第二个冒号之后,您没有包含任何捕获消息正文的内容,因此整个字符串都不匹配。它可以在测试人员中使用,因为如果输入的任何部分匹配,则“常规”正则表达式就是“匹配项”。

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


应该匹配

关于java - Java正则表达式中的空格,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10521521/

10-11 22:35
查看更多