Należy usunąć wszystkie znaki z podanego ciągu, z wyjątkiem kilku, które powinny pozostać. Jak to zrobić z regexp?Czy w regexp jest operator (!)?
Prosty test: znaki [1, a, *] nie powinny być usuwane, wszystkie inne powinny mieć napis "asdf123 **".
Należy usunąć wszystkie znaki z podanego ciągu, z wyjątkiem kilku, które powinny pozostać. Jak to zrobić z regexp?Czy w regexp jest operator (!)?
Prosty test: znaki [1, a, *] nie powinny być usuwane, wszystkie inne powinny mieć napis "asdf123 **".
Istnieje:^w zestawie.
Powinieneś być w stanie zrobić coś takiego:
text = text.replaceAll("[^1a*]", "");
Pełna próbki:
public class Test
{
public static void main(String[] args)
{
String input = "asdf123**";
String output = input.replaceAll("[^1a*]", "");
System.out.println(output); // Prints a1**
}
}
Po zastosowaniu wewnątrz [
i ]
^
(karetka) to operator not
.
Stosowany jest tak:
"[^abc]"
To dopasuje dowolny znak z wyjątkiem a
b
lub c
.
Kiedy używany * jako pierwszy znak * wewnątrz ... –
Istnieje zanegowany kod character class, który może działać w tym wystąpieniu. Możliwość zdefiniowania jednego umieszczając ^
na początku klasy, takie jak:
[^1a\*]
dla konkretnego przypadku.
możesz ned uciec *, powinno być \\ * – Cfreak
Właściwie nie (w regex dialektów, że jestem świadomy, tak), ale mogą. Dodam jednak, że jest to wyraźne. – eldarerathis
@Cfreak: nie, nie musisz (patrz wyżej) –
W klasie postać^nie jest. Tak więc pasuje do wszystkich znaków oprócz tych.
chcesz dopasować przeciwko wszystkich znaków z wyjątkiem: [asdf123 *], użyj^
Nie ma „nie” operator w wyrażeniach regularnych Java jak jest w Perlu.
Czy mówisz o operatorze dopasowywania odwróconego wyrażenia regularnego Perla '! ~'? To nie ma znaczenia, biorąc pod uwagę fakt, że OP dokonuje substytucji, a nie dopasowania. A jeśli * próbował * dopasować znaki, zamiast je zastąpić, musiałby przeprowadzić dopasowanie * pozytywne * dla wyrażeń regularnych, które wykluczają te znaki, jak wskazali inni respondenci. Na przykład w Perlu może to zrobić: 'moje @result = $ s = ~ m/[^ 1a *] +/g;' –
Nie musisz uciekać przed '*' w klasie znaków. – kennytm
@KennyTM: Ooh, nie wiedziałem o tym. Pozdrawiam, dostosowuję teraz ... –
Nie musisz też uciec od myślnika, jeśli jest na końcu lub na początku klasy postaci. Tak więc [^ * .-] reprezentuje wszystko, co nie jest gwiazdką, kropką lub łącznikiem. :) –