2015-05-12 24 views
9

Pracuję z niektórych kodu w Javie, który posiada oświadczenie jakCo oznacza wyrażenie regex "\ p {Z}"?

String tempAttribute = ((String) attributes.get(i)).replaceAll("\\p{Z}","") 

nie jestem przyzwyczajony do regex, więc jaki jest sens tego? (Jeśli mógłbyś podać stronę internetową, by poznać podstawy regexu, które byłyby cudowne), widziałem, że dla ciągu takiego jak

ept as y to zostaje przekształcone w eptasy, ale to nie wydaje się właściwe. Wierzę, że facet, który to napisał, chciał przyciąć miejsce na początku i końcu przestrzeni.

+0

To nie prawda, możesz zobaczyć [tutaj] (https://regex101.com/r/cG1tG6/1), że pasuje on do wszystkich białych znaków, więc usuwa je w podanym kodzie za pomocą 'replaceAll()'. –

Odpowiedz

6

Usuwa wszystkie białe spacje (zastępuje wszystkie puste spacje pustymi ciągami).

Wspaniały poradnik regex jest dostępny pod adresem regular-expressions.info. Umocowanie from this site:

\ P {Z} i \ s {Separator} jakakolwiek spacji lub niewidzialnego separatora.

+0

A co z pierwszym cięciem? – BRabbit27

+0

Pierwszy slash to znak ucieczki oznaczający, że 'p {Z}' odnosi się do wyrażenia regularnego szukającego białych znaków, zamiast tylko 'p',' {',' Z' i '}'. – jojo

+8

Ukośnik odwrotny jest podwojony w kodzie programu, ponieważ jest to składnia języka Java dla literałów łańcuchowych. Kompilator Java tworzy jeden ukośnik odwrotny, a ciąg z jednym ukośnikiem przekazywany jest do silnika Regex. Zobacz [Samouczek Regex, sekcja "Specjalne znaki i języki programowania"] (http://www.regular-expressions.info/characters.html) –

3

PO stwierdził, że fragment kodu był w Javie. Aby skomentować oświadczenie:

\ p {Z} lub \ p {Separator}: dowolny rodzaj białych znaków lub niewidoczny separator.

Przykładowy kod poniżej pokazuje, że nie dotyczy to środowiska Java.

public static void main(String[] args) { 

    // some normal white space characters 
    String str = "word1 \t \n \f \r " + '\u000B' + " word2"; 

    // various regex patterns meant to remove ALL white spaces 
    String s = str.replaceAll("\\s", ""); 
    String p = str.replaceAll("\\p{Space}", ""); 
    String b = str.replaceAll("\\p{Blank}", ""); 
    String z = str.replaceAll("\\p{Z}", ""); 

    // \\s removed all white spaces 
    System.out.println("s [" + s + "]\n"); 

    // \\p{Space} removed all white spaces 
    System.out.println("p [" + p + "]\n"); 

    // \\p{Blank} removed only \t and spaces not \n\f\r 
    System.out.println("b [" + b + "]\n"); 

    // \\p{Z} removed only spaces not \t\n\f\r 
    System.out.println("z [" + z + "]\n"); 

    // NOTE: \p{Separator} throws a PatternSyntaxException 
    try { 
     String t = str.replaceAll("\\p{Separator}",""); 
     System.out.println("t [" + t + "]\n"); // N/A 
    } catch (Exception e) { 
     System.out.println("throws " + e.getClass().getName() + 
       " with message\n" + e.getMessage()); 
    } 

} // public static void main 

Wyjście tego jest:

s [word1word2] 

p [word1word2] 

b [word1 


word2] 

z [word1  


word2] 

throws java.util.regex.PatternSyntaxException with message 
Unknown character property name {Separator} near index 12 
\p{Separator} 
      ^

Oznacza to, że w miejscach Java \\ {Z} usuwa tylko przestrzeni, a nie „Dowolny rodzaj spacji lub niewidzialnego separatora”.

Wyniki te pokazują również, że w języku Java \\ p {Separator} zgłasza wyjątek PatternSyntaxException.

+0

\\ s nie pasuje "\ u00A0" (brak znaków spacji) – Yahor

Powiązane problemy