java - 如何表示反斜杠

标签 java regex

我想替换不在提供列表中的内容

[^-\\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/

相关文章:

java - 以编程方式为 FrameLayout 的子项设置 layout_gravity?

python - 快速解压大文本文件

Java : replacing text URL with clickable HTML link

javascript - 正则表达式 - 匹配一些网址

java - 组织.hibernate.AnnotationException : @OneToOne or @ManyToOne on <entity> references an unknown entity

java - 以页为单位写入磁盘

java - arrayIndexScale 返回的值指的是什么?

python - 如何使用python在网站中查找反向链接

c++ - POSIX 扩展正则表达式 - 不包含 X 但包含 Y (std::regex c++11)

java - Eclipse 在不应该出现的代码上给出错误