Есть ли в регулярном выражении оператор not (!)? - PullRequest
12 голосов
/ 05 октября 2010

Мне нужно удалить все символы из данной строки, кроме нескольких, которые должны остаться.Как это сделать с помощью регулярного выражения?

Простой тест: символы [1, a, *] не должны быть удалены, все остальные должны быть из строки "asdf123 **".

Ответы [ 6 ]

22 голосов
/ 05 октября 2010

В комплекте: ^.

Вы должны быть в состоянии сделать что-то вроде:

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**
    }
}
9 голосов
/ 05 октября 2010

При использовании внутри [ и ] ^ (каретка) является оператором not.

Используется так:

"[^abc]"

Это будет соответствовать любому символу кроме a b или c.

1 голос
/ 05 октября 2010

Существует отрицательный класс символов , который может работать для этого экземпляра.Вы определяете один, помещая ^ в начале класса, например:

[^1a\*]

для вашего конкретного случая.

0 голосов
/ 05 октября 2010

В регулярных выражениях Java нет оператора not, как в Perl.

0 голосов
/ 05 октября 2010

Вы хотите сопоставить все символы, кроме: [asdf123 *], используйте ^

0 голосов
/ 05 октября 2010

В классе символов ^ нет.Так что

[^1a\*] будет соответствовать всем символам, кроме этих.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...