有没有另一种方法来做一个没有字符串转义所有字符的正则表达式?

时间:2011-08-17 17:53:04

标签: java regex readability

我有这行代码来删除一些标点符号:

str.replaceAll("[\\-\\!\\?\\.\\,\\;\\:\\\"\\']", "");

我不知道这个正则表达式中的所有字符是否都需要被转义,但我只是为了安全而逃脱。

有没有办法以更清晰的方式构建这样的正则表达式?

2 个答案:

答案 0 :(得分:4)

[ ... ]内,您无需转义字符。例如,[.]无论如何都没有意义!

规则的例外是

  • ]因为它会过早关闭整个[...]表达式。
  • ^如果是第一个字符,则[^abc]匹配 abc以外的所有内容。
  • -除非它是第一个/最后一个字符,因为[a-z]匹配az之间的所有字符。

因此,你可以写

str.replaceAll("[-!?.,;:\"']", "")

要将字符串引用到正则表达式中,您还可以使用Pattern.quote根据需要转义字符串中的字符。

<强>演示:

String str = "abc-!?.,;:\"'def";
System.out.println(str.replaceAll("[-!?.,;:\"']", "")); // prints abcdef

答案 1 :(得分:3)

你可能需要转义双引号,因为你的字符串是双引号;但正如aioobe所说,不要逃避其余的事。但是,将-放在组的末尾。