我想确保文字不是问题类型,并且至少包含以下其中一种:观看直播观看演讲#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...
我希望在控制台中看到是,因为匹配但没有任何反应 为什么呢?
答案 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