我正在尝试删除/替换字符串中的整个单词。
我想这样做的大小写敏感,它也应该为特殊字符,如.
,\
或/
工作。
要做到这一点,我使用以下代码:
String result = Pattern.compile(stringToReplace, Pattern.LITERAL | Pattern.CASE_INSENSITIVE | Pattern.UNICODE_CASE).matcher(inputString)
.replaceAll("");
像这样,它可以处理特殊字符,并且不区分大小写。
我知道可以通过使用“\b”启用全字匹配。
我可以这样做:
String result = Pattern.compile("\\b"+stringToReplace+"\\b", Pattern.CASE_INSENSITIVE | Pattern.UNICODE_CASE).matcher(inputString)
.replaceAll("");
这样它只匹配整个单词,但是对于特殊字符会有问题。它会干扰Pattern. LITERAL。我需要禁用它,这是不希望的。
如何将Pattern.LITERAL与全字匹配结合使用?
1条答案
按热度按时间yv5phkfx1#
您必须记住,
\b
word boundary pattern是上下文相关的,并且匹配字符串的开始/结束和单词字符之间,或者匹配单词和非单词字符之间。你需要使用
主要有两个变化:
stringToReplace
需要为Pattern.quote
d,以确保所有特殊字符都被转义(?!\B\w)
是左手自适应字边界,而(?<!\w\B)
是右手自适应字边界。实际上,由于零宽度Assert和字边界模式的性质,看起来两者可以互换地使用,但是从逻辑的观点来看,这种表示法是最好的。