【问题标题】:Whitespace in Java's regular expressionJava正则表达式中的空格
【发布时间】:2012-05-09 17:57:41
【问题描述】:

我正在尝试编写一个正则表达式来处理 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 regex pattern-matching whitespace


    【解决方案1】:

    javamatches 方法再次来袭!仅当 entire 字符串与输入匹配时,该方法才返回 true。您没有在第二个冒号之后包含任何捕获消息正文的内容,因此 entire 字符串不匹配。它适用于测试人员,因为如果输入的任何部分匹配,“正常”正则表达式就是“匹配”。

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

    应该匹配

    【讨论】:

      【解决方案2】:

      如果您查看matches() 的文档,您会注意到它正在尝试匹配整个 字符串。您需要修复您的正则表达式或使用find() 来遍历子字符串匹配。

      【讨论】:

        猜你喜欢
        • 2019-07-07
        • 1970-01-01
        • 2013-02-26
        • 2012-01-17
        • 2011-08-10
        • 2012-02-02
        • 2016-08-18
        • 2013-12-16
        • 2014-08-13
        相关资源
        最近更新 更多