所以我发现边界这个词非常有效,可以确保在文本中找到正确的单词,如果它们只包含这个单词的一部分,我们就不会删除其他单词,但是我注意到它的作用很糟糕在String开始和结束。
理想情况下,我希望像这样的正则表达式在字符串的开头和结尾也能正常工作,因为这也是单词开始/结束的地方:
String regex1 = "\\b" + searchedWord + "\\b";
然而事实证明我必须像这样转换正则表达式,以确保它也适用于字符串的开始和结束:
String regex2 = "(^|\\b)" + searchedWord + "($|\\b)";
我还没有发现使用后者正则表达式的任何副作用,但我想知道是否有任何特殊的边界或如何更有效地写边界,以使其不那么丑陋和反直觉。 / p>
有人知道更好的方法吗?也许您也可以改进我建议的正则表达式,以防您在使用它时发现任何问题。
答案 0 :(得分:0)
如果searchWord
的第一个和最后一个字符是单词字符,则不会产生任何副作用。
"侧"只有当两端的字符都是非单词字符时才会出现效果。
现在,\b
可以匹配4个位置:字符串开头和单词字符之间,非单词和单词字符之间,单词和非单词字符之间,以及单词字符和结尾之间串。 如果你需要确保searchWord
之前没有单词char,你可以使用明确的(?<!\w)
负面的lookbehind并确保单词后面没有单词char ,您可以使用(?!\w)
否定前瞻。
还要记住,\b
与\w
相同,本身并不支持Unicode。添加Pattern.UNICODE_CHARACTER_CLASS
标记或(?U)
:
String regex1 = "(?U)(?<!\\w)" + searchedWord + "(?!\\w)";
其他方式通常包括确保
周围(或在字符串的开头/结尾)有空格String regex1 = "(?U)(?<!\\S)" + searchedWord + "(?!\\S)";
虽然在标点符号之前或之后都不匹配。