2012-03-19 11 views
14

Próbuję napisać walidację walidacji, aby dopasować dowolny znak (zwykły, cyfrowy i specjalny) z wyjątkiem =.Używanie wyrażenia regularnego do dopasowania dowolnego znaku poza =

Oto co napisałem -

String patternString = "[[^=][\\w\\s\\W]]*"; 
    Pattern p = Pattern.compile(patternString); 
    Matcher m = p.matcher(str); 

    if(m.matches()) 
     System.out.println("matches"); 
    else 
     System.out.println("does not"); 

Ale pasuje ciąg wejściowy "2009-09/09 12: 23: 12.5 =" ze wzoru.

Jak mogę wykluczyć = (lub jakikolwiek inny znak, jeśli o to chodzi) z ciągu wzorców?

+0

Co próbujesz dopasować? (albo nie)? tylko [^ =] * będzie pasować do niczego oprócz znaku "=". –

+1

Nie można zagnieździć klas postaci. '[[]' jest po prostu klasą znaków składającą się z pojedynczego znaku '[. – tripleee

Odpowiedz

30

Jeśli jedyną niedozwoloną postacią jest znak równości, powinno działać coś takiego jak [^=]*.

[^...] to negowana klasa znaków; dopasowuje pojedynczy znak, który jest dowolnym znakiem, z wyjątkiem jednego z listy między nawiasami kwadratowymi. * powtarza wyrażenie zero lub więcej razy.

4

Jeśli chcesz tylko sprawdzić występowanie "=", dlaczego nie używasz metody String indexOf()?

if str.indexOf('=') //... 
+6

'zawiera' jest krótszy, łatwiejszy do zrozumienia i nie trzeba ćwiczyć z indeksami. – phihag

7

Przede wszystkim nie potrzebujesz wyrażeń regularnych. Wystarczy zadzwonić contains:

if(str.contains("=")) 
    System.out.println("does not"); 
else 
    System.out.println("matches"); 

Prawidłowe regexp szukasz właśnie

String patternString = "[^=]*"; 
1

Jeśli twoim celem jest, aby nie mieć żadnych = znaki w Twojej ciąg, spróbuj następujące

String patternString = "[^=]*"; 
Powiązane problemy