Java regexp中是否有not(!)运算符?
我需要删除给定字符串中的所有字符,除了应该留下的几个字符。如何使用regexp实现这一点Java regexp中是否有not(!)运算符?,java,regex,Java,Regex,我需要删除给定字符串中的所有字符,除了应该留下的几个字符。如何使用regexp实现这一点 简单测试:当在[和]中使用时,^(插入符号)是而不是运算符,字符[1,a,*]不应删除,所有其他字符都应从字符串“asdf123**”中删除 它是这样使用的: "[^abc]" 这将匹配除ab或c之外的任何字符。有一个否定的字符,可能适用于此实例。您可以通过将^放在类的开头来定义一个,例如: [^1a\*] 根据您的具体情况。一组中有:^ 您应该能够执行以下操作: text = text.replaceA
简单测试:当在
[
和]
中使用时,^
(插入符号)是而不是运算符,字符[1,a,*]不应删除,所有其他字符都应从字符串“asdf123**”中删除
它是这样使用的:
"[^abc]"
这将匹配除a
b
或c
之外的任何字符。有一个否定的字符,可能适用于此实例。您可以通过将^
放在类的开头来定义一个,例如:
[^1a\*]
根据您的具体情况。一组中有:^
您应该能够执行以下操作:
text = text.replaceAll("[^1a*]", "");
全样本:
public class Test
{
public static void main(String[] args)
{
String input = "asdf123**";
String output = input.replaceAll("[^1a*]", "");
System.out.println(output); // Prints a1**
}
}
在字符类中,^不是。所以
[^1a\*]
将匹配除这些字符以外的所有字符。要匹配除:[asdf123*]以外的所有字符,请使用^Java正则表达式中没有像Perl中那样的“not”运算符 你想要逃避*,应该是\*事实上你没有(无论如何,我知道用正则方言),但你可以。不过,我会将其添加为显式。@Cfreak:不,您不需要(见上文)在字符类中转义*
。如果连字符位于字符类的末尾或开头,也不需要转义。所以[^*-]表示所有不是星号、句点或连字符的内容。:)谢谢我有点困惑,同一个符号是用来匹配字符串的开头的。你是说Perl的倒装正则表达式匹配运算符~代码>?考虑到OP是在做替换,而不是匹配,这并不重要。如果他试图匹配字符而不是替换字符,他需要对排除这些字符的正则表达式进行正匹配,正如其他响应者指出的那样。例如,在Perl中,他可能会这样做:my@result=$s=~m/[^1a*]+/g代码>