我有这个字符串:
String a = "$$bar$55^$$";
我要删除所有符号。我做正则表达式:
String b = a.replaceAll("(?<=[^[\\p{Alpha}][\\p{Digit}]])", "");
但是,我得到了:
$$bar$55^$$
但是我想得到这个字符串:
bar55
我在做什么错?如何过滤除字母和数字以外的所有字符?
在Oracle
中它对我有用:
select regexp_replace('$$bar$55^$$','[^[:alpha:][:digit:]]*') from dual;
答案 0 :(得分:3)
您所使用的环视是一种非消耗模式,即,由于将仅匹配字符串中的位置,因此匹配值将始终为空。使用
String b = a.replaceAll("\\P{Alnum}+", "");
\\P{Alnum}+
模式匹配ASCII字母数字字符以外的一个或多个字符。另外,请参见Predefined Character classes。
或者,您可以使用
String b = a.replaceAll("[^\\p{L}\\p{P}\\p{S}]+", "");
这将删除1个或更多字符的块,而不是Unicode字母,标点和符号。