检查文本是否不是问题类型,还包含一些特定的单词

时间:2015-09-11 16:44:11

标签: java regex

我想确保文字不是问题类型,并且至少包含以下其中一种:观看直播观看演讲#breaking #breaking news

所以我编写了如下代码:

private static void containsQuestion(String commentstr){
     String urlPattern = "^(?!.*?\\?)(watch live|watch speech live|#breaking|#breaking news)";
     Pattern p = Pattern.compile(urlPattern,Pattern.CASE_INSENSITIVE);
        Matcher m = p.matcher(commentstr);
        if (m.find()) {
            System.out.println("yes");
        }
}

但是当我尝试使用例如:

They say 2's company; is 3 a crowd watch live on...

我希望在控制台中看到是,因为匹配但没有任何反应 为什么呢?

2 个答案:

答案 0 :(得分:1)

问题是你使用了开始锚^

删除它:

String urlPattern = 
        "(?!.*?\\?)(watch live|watch speech live|#breaking|#breaking news)";

或者在您的关键字之前放置.*?以匹配您的短语之前的任何字符数:

String urlPattern =
       "^(?!.*?\\?).*?(watch live|watch speech live|#breaking|#breaking news)";

由于使用了^,您的正则表达式会尝试仅在开始时匹配所有这些短语。

答案 1 :(得分:0)

您需要在关键词之前/之后允许更多字符: 试试这个:

/^(?!.*?\?).*(watch live|watch speech live|\#breaking|\#breaking news).*/gm

https://regex101.com/r/uS1xQ4/2