我想替换不在提供列表中的内容
[^-\\dA-Za-zÂÃâ`~!@#$%^&*()_+=[{]}:;<,>.?/ ]
我想在此列表中包含反斜杠 \
,这样反斜杠就不会被替换。
如果我这样给
.replaceAll("[^-\\dA-Za-zÂÃâ`~!@#$%^&*()_+=[{]}\\:;<,>.?/ ]","")
它没有像我预期的那样工作。
"xyda\asff"..replaceAll("[^-\\dA-Za-zÂÃâ`~!@#$%^&*()_+=[{]}\\:;<,>.?/ ]","")
Expected result :: xyda\asff
Output :: xydaasff
我不想替换 \
。
最佳答案
您需要应用两个 级别的转义 - 一个用于正则表达式本身,一个用于 Java 字符串文字。这意味着您需要 四个 连续的反斜杠。所以:
replaceAll("[^-\\dA-Za-zÂÃâ`~!@#$%^&*()_+=[{]}\\:;<,>.?/\\\\ ]", "")
我假设 \\d
是为了覆盖任何数字,而不是实际上将 d
放入列表中?
您可能会发现将模式打印到控制台最简单,这样您就可以准确地看到正则表达式引擎看到的内容,而无需相关的 Java 字符串文字转义。上面的模式是:
[^-\dA-Za-zÂÃâ`~!@#$%^&*()_+=[{]}\:;<,>.?/\\ ]
所以带反斜杠的位是:
\d
(数字)\:
(冒号)\\
(反斜杠)
关于java - 如何表示反斜杠,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18503280/