我有正则表达式来检查某些文本是否包含单词(忽略边界)
String regexp = ".*\\bSOME_WORD_HERE\\b.*";
但是这个正则表达式返回false
当“SOME_WORD”以#(主题标签)开头时。
Example, without #
String text = "some text and test word";
String matchingWord = "test";
boolean contains = text.matches(".*\\b" + matchingWord + "\\b.*");
// now contains == true;
But with hashtag `contains` was false. Example:
text = "some text and #test word";
matchingWord = "#test";
contains = text.matches(".*\\b" + matchingWord + "\\b.*");
//contains == fasle; but I expect true
The \b#
模式匹配 a#
前面有一个单词字符:字母、数字或下划线。
如果您需要匹配#
前面没有单词 char,请使用否定后向查找(?<!\w)
。同样,要确保尾随\b
如果存在非单词字符则匹配,使用(?!\w)
负向前瞻:
text.matches("(?s).*(?<!\\w)" + matchingWord + "(?!\\w).*");
Using Pattern.quote(matchingWord)
如果你的matchingWord
可以包含特殊的正则表达式元字符。
或者,如果您打算在空格或字符串开头/结尾之间匹配搜索词,则可以使用(?<!\S)
作为初始边界和(?!\S)
作为尾随的
text.matches("(?s).*(?<!\\S)" + matchingWord + "(?!\\S).*");
还有一件事:.*
in the .matches
不是最好的正则表达式解决方案。正则表达式就像"(?<!\\S)" + matchingWord + "(?!\\S)"
with Matcher#find()
将以更优化的方式进行处理,但您需要初始化Matcher
对此的对象。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)