空白Java中的正则表达式(Whitespace in Java's regular exp

2019-10-31 17:25发布

我想写一个正则表达式马赫的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");

这是令人困惑的。

Answer 1:

java的matches方法再次来袭! 这种方法只有在整个字符串匹配输入返回true。 你没有包含任何第二个冒号后面抓住了消息体,所以整个字符串不匹配。 它工作在测试,因为“正常”正则表达式是“匹配”,如果输入的任何部分匹配。

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

应匹配



Answer 2:

如果你看一下文档匹配() ,uou会发现,它正试图将整个字符串相匹配。 你需要修复您的正则表达式或使用find()通过字符串匹配项进行迭代。



文章来源: Whitespace in Java's regular expression