我使用以下g来确定单词是否出现在文本中,强制执行单词边界:
if ( Pattern.matches(".*\\b" + key + "\\b.*", text) ) {
//matched
}
这将匹配 text-book 上的 book ,但不会匹配 facebook 。
现在,我想做相反的事情:确定输入文本是否在中有单词边界。
E.g。 mutually-collaborative
(正确,里面有一个单词边界)和mutuallycollaborative
(错误,因为里面没有单词边界)。
如果边界是标点符号,这将起作用:
if( Pattern.matches("\\p{Punct}", text) ) { //check punctuations
//has punctuation
}
我想检查一般的字边界,例如' - '等。
有什么想法吗?
答案 0 :(得分:1)
您想要检查给定字符串是否包含字符串 in 字符串。请注意,\b
匹配非空字符串的开头和结尾。因此,您需要排除这些替代方案。只需使用
"(?U)(?:\\W\\w|\\w\\W)"
这样,您将确保字符串包含单词和非单词字符的组合。
请参阅IDEONE demo:
String s = "mutuallyexclusive";
Pattern pattern = Pattern.compile("(?U)(?:\\W\\w|\\w\\W)");
Matcher matcher = pattern.matcher(s);
if (matcher.find()){
System.out.println(matcher.group() + " word boundary found!");
} else {
System.out.println("Word boundary NOT found in " + s);
}
关于word boundary可以匹配的内容的一些参考:
有三种不同的职位符合词边界:
- 在字符串中的第一个字符之前,如果第一个字符是单词字符。
- 在字符串中的最后一个字符之后,如果最后一个字符是单词字符。
- 字符串中的两个字符之间,其中一个是单词字符,另一个不是单词字符。
因此,对于\w\W|\W\w
,我们排除前两种情况。