Wyrażenie regularne \ p {L} i \ p {N}

106

Nie mam doświadczenia z wyrażeniami regularnymi i otrzymałem następujące wyrażenie regularne:

(\p{L}|\p{N}|_|-|\.)*

Wiem, co oznacza * i | oznacza „lub” i to \ ucieka.

Ale nie wiem, co \p{L}i co \p{N}oznacza. Szukałem go w Google, ale bez rezultatu ...

Czy ktoś może mi pomóc?

Diemauerdk
źródło
Wygooglowałem też, ale otrzymałem ten wynik .
MC Emperor

Odpowiedzi:

160

\p{L}pasuje do pojedynczego punktu kodowego w kategorii „litera”.
\p{N}dopasowuje dowolny znak numeryczny w dowolnym skrypcie.

Źródło: regular-expressions.info

Jeśli zamierzasz dużo pracować z wyrażeniami regularnymi, sugerowałbym dodanie tej witryny do zakładek, jest to bardzo przydatne.

Cerbrus
źródło
dzięki za szybką odpowiedź :). Ale czy wyrażenie regularne nie powinno pasować do 10? Próbowałem dopasowywania wyrażeń
Diemauerdk
@ user1093774: Nie sądzę, aby regexpal obsługiwał \p{}, ale tak, powinien pasować.
Cerbrus
1
Ta składnia jest specyficzna dla współczesnych implementacji wyrażeń regularnych Unicode, których nie wszyscy interpretują. Możesz bezpiecznie zamienić \ p {L} na {a-zA-Z} (notacja ascii) lub {\ w} (notacja perl / vim); i \ p {N} autorstwa {0-9} (ascii) lub {\ d} (perl / vim). Jeśli chcesz dopasować je wszystkie, po prostu zrób: {a-zA-Z0-9} + lub {\ w \ d} +
Rafael Beckel
16
Rafael, ja nie”zgadzają się, że można bezpiecznie zastąpić \p{L}przez {a-zA-Z}. {a-zA-Z}na przykład nie dopasuje żadnego znaku akcentowanego, takiego jak é, który jest używany w całym języku francuskim. Dlatego można je bezpiecznie wymienić tylko wtedy, gdy masz pewność, że będziesz przetwarzać tylko angielski i nic więcej.
Rolf
Czy pasuje do punktu kodowego lub jednostki kodu? stackoverflow.com/a/27331885/4928642
Qwertiy
30

Są to skróty do właściwości Unicode ( \p{L}dla liter Unicode, \p{N}dla cyfr Unicode). Obsługiwane są przez .NET, Perl, Java, PCRE, XML, XPath, JGSoft, Ruby (1.9 i wyższe) i PHP ( od 5.1.0 )

W każdym razie jest to bardzo dziwne wyrażenie regularne. Nie powinieneś używać alternacji, gdy wystarczyłaby klasa postaci:

[\p{L}\p{N}_.-]*
Tim Pietzcker
źródło
jego wyrażenie regularne w xml - sam nie utworzyłem tego wyrażenia regularnego :)
Diemauerdk
Pomijając fakt, że użyto przechwytywania nawiasów, RE będą faktycznie kompilowały się do tego samego (cóż, w każdym optymalizującym silniku RE, który obsługuje \p{…}styl sekwencji ucieczki).
Donal Fellows
który wygląda jak wtyczka Unicode XRegExp. który, jeśli tak, byłby dowolnym alfanumerycznym w dowolnym języku
Tim
Dzięki, lista obsługiwanych języków była przydatna, nie wiedząc, że istnieją ograniczenia (większość regex'y rzeczy jest „uniwersalna”).
HoldOffHunger
@HoldOffHunger: Niestety daleko od tego. Dlatego istnieje rynek na narzędzia takie jak RegexBuddy. Spójrz na regular-expressions.info/refbasic.html , będziesz zdumiony subtelnymi i niezbyt subtelnymi różnicami między smakami
wyrażeń