我在大文本中寻找“成功(并从失败中学习!)”一词。由于有括号,我使用了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 more
,failures!)
,failures!)or not
如果要确保它后没有另一个字母,可以使用
"\\b" + phrase + "\\B"
,但是我不确定这里是否需要它。