Java regexp中是否有not(!)运算符?

Java regexp中是否有not(!)运算符?,java,regex,Java,Regex,我需要删除给定字符串中的所有字符,除了应该留下的几个字符。如何使用regexp实现这一点 简单测试:当在[和]中使用时,^(插入符号)是而不是运算符,字符[1,a,*]不应删除,所有其他字符都应从字符串“asdf123**”中删除 它是这样使用的: "[^abc]" 这将匹配除ab或c之外的任何字符。有一个否定的字符,可能适用于此实例。您可以通过将^放在类的开头来定义一个,例如: [^1a\*] 根据您的具体情况。一组中有:^ 您应该能够执行以下操作: text = text.replaceA

我需要删除给定字符串中的所有字符,除了应该留下的几个字符。如何使用regexp实现这一点


简单测试:当在
[
]
中使用时,
^
(插入符号)是
而不是
运算符,字符[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