Java正则表达式中的空格

时间:2012-05-09 17:57:42

标签: java regex pattern-matching whitespace

我正在尝试编写正则表达式来处理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");

令人困惑。

2 个答案:

答案 0 :(得分:1)

java matches方法再次出现!如果整个字符串与输入匹配,则该方法仅返回true。您没有包含在第二个冒号后捕获邮件正文的任何​​内容,因此整个字符串不匹配。它适用于测试人员,因为如果输入的任何部分匹配,“正常”正则表达式就是“匹配”。

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

应匹配

答案 1 :(得分:0)

如果查看matches()的文档,您会发现它正在尝试匹配整个字符串。您需要修复正则表达式或使用find()迭代子字符串匹配。