确定字符串是否具有内部字边界

时间:2016-02-18 11:16:57

标签: java regex pattern-matching string-matching

我使用以下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
}

我想检查一般的字边界,例如' - '等。

有什么想法吗?

1 个答案:

答案 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,我们排除前两种情况。