java中的正则表达式否定如何否定嵌套类
我有下面的程序来替换特殊字符java中的正则表达式否定如何否定嵌套类,java,regex,regex-negation,Java,Regex,Regex Negation,我有下面的程序来替换特殊字符 String a = "fgA9.^"; String b =""; a = a.replaceAll("[^[a-zA-Z0-9]]", b); System.out.println(a); 这将(.^)打印为输出,但我希望正则表达式模式会对字母、数字求反,并替换特殊字符 我可以通过a=a.replaceAll([[^a-zA-Z0-9]],b)查看我的预期输出 这两者之间有什么区别,在这两种情况下我都使用
String a = "fgA9.^";
String b ="";
a = a.replaceAll("[^[a-zA-Z0-9]]", b);
System.out.println(a);
这将(.^)打印为输出,但我希望正则表达式模式会对字母、数字求反,并替换特殊字符
我可以通过a=a.replaceAll([[^a-zA-Z0-9]],b)查看我的预期输出代码>
这两者之间有什么区别,在这两种情况下我都使用否定 使用嵌套字符类,您创建了一个:
还可以使用联合创建由两个或多个单独的字符类组成的单个字符类。要创建联合,只需将一个类嵌套在另一个类中,例如[0-4[6-8]]
。这个特定的联合创建了一个与数字0
、1
、2
、3
、4
、6
、7
和8
匹配的单字符类
“[^[a-zA-Z0-9]]”
正则表达式匹配字母数字字符,因为模式由匹配ASCII字母和数字的[^]
(忽略空联合部分)和[a-zA-Z0-9]
组成
在[[^a-zA-Z0-9]]
模式中,您指出了一个否定字符类[^a-zA-Z0-9]
,该类与ASCII字母/数字以外的任何字符匹配,并与空部分合并,再次被忽略
[0-4[6-8]
regex在语义上完全等同于[0-46-8]
,在组合否定字符类和肯定字符类时可以观察到更实际的并集值。例如,[^\p{L}[a-c]+
将匹配除字母以外的一个或多个字符([^\p{L}]
)和三个小写的a
、b
和c
字符。您使用了字符类并集。