我在大文本中寻找“成功(并从失败中学习!)”一词。由于有括号,我使用了quote(...)来允许它,但我也想使用单词边界“ \ b”,因此,如果在这样的文本中找到该短语,则将忽略该短语:失败!)”。

这是我的代码:

String phrase = Pattern.quote( "in successes (and learn from their failures!)" );
Pattern myPattern = Pattern.compile( "\\b" + phrase + "\\b" );  // Use word boundary(\b) = No letters after it.
Matcher myMatcher = myPattern.matcher( bigText );
myMatcher.find();  // Returns false.


如前所述,由于使用“ \ b”,此代码将返回false。如果我省略了“ \ b”,匹配器将返回true。有两种方法可以解决此问题:quote(...)+“ \ b”吗?

最佳答案

我认为最好的选择是删除第二个\b

Pattern myPattern = Pattern.compile( "\\b" + phrase);


phrase!)结尾,这不是单词字符,并且在所有情况下都应匹配得很好,例如:failures!), and morefailures!)failures!)or not

如果要确保它后没有另一个字母,可以使用"\\b" + phrase + "\\B",但是我不确定这里是否需要它。

09-11 19:33
查看更多