Espressione regolare \ p {L} e \ p {N}


106

Sono nuovo alle espressioni regolari e mi è stata assegnata la seguente espressione regolare:

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

So cosa significa * e | significa "o" e che \ sfugge.

Ma cosa non so cosa \p{L}e cosa \p{N}significa. L'ho cercato su Google, senza risultato ...

Qualcuno può aiutarmi?


Ho cercato anche su Google, ma ho ottenuto questo risultato .
MC Emperor

Risposte:


160

\p{L}corrisponde a un singolo punto di codice nella categoria "lettera".
\p{N}corrisponde a qualsiasi tipo di carattere numerico in qualsiasi script.

Fonte: regular-expressions.info

Se hai intenzione di lavorare molto con le espressioni regolari, ti suggerisco di aggiungere il sito ai preferiti, è molto utile.


grazie per la risposta veloce :). Ma la regex non dovrebbe quindi corrispondere a 10? Ho provato un
abbinamento di espressioni regolari

@ user1093774: Non credo che regexpal supporti \p{}, ma sì, dovrebbe corrispondere.
Cerbrus

1
Questa sintassi è specifica per l'implementazione moderna di espressioni regolari Unicode, che non tutti gli interpreti riconoscono. Puoi tranquillamente sostituire \ p {L} con {a-zA-Z} (notazione ascii) o {\ w} (notazione perl / vim); e \ p {N} di {0-9} (ascii) o {\ d} (perl / vim). Se vuoi abbinarli tutti, basta fare: {a-zA-Z0-9} + o {\ w \ d} +
Rafael Beckel

16
Rafael, non sono d'accordo che puoi tranquillamente sostituire \p{L}con {a-zA-Z}. {a-zA-Z}, ad esempio, non corrisponderà ad alcun carattere accentato, come é, che è usato ovunque in francese. Quindi questi sono sostituibili in modo sicuro solo se sei sicuro che elaborerai solo l'inglese e nient'altro.
Rolf

Corrisponde al punto di codice o all'unità di codice? stackoverflow.com/a/27331885/4928642
Qwertiy

30

Si tratta di scorciatoie di proprietà Unicode ( \p{L}per lettere Unicode, \p{N}per cifre Unicode). Sono supportati da .NET, Perl, Java, PCRE, XML, XPath, JGSoft, Ruby (1.9 e versioni successive) e PHP ( da 5.1.0 )

In ogni caso, è una regex molto strana. Non dovresti usare l'alternanza quando una classe di caratteri sarebbe sufficiente:

[\p{L}\p{N}_.-]*

la sua regex in xml - non ho costruito la regex da solo :)
Diemauerdk

A parte il fatto che sono state utilizzate le parentesi di cattura, le RE verranno effettivamente compilate per la stessa cosa (beh, in qualsiasi motore RE ottimizzato che supporti lo \p{…}stile della sequenza di escape in primo luogo).
Donal Fellows

che assomiglia al plugin Unicode XRegExp. che se è così, sarebbe qualsiasi alfanumerico in qualsiasi lingua
Tim

Grazie, elencare le lingue di supporto è stato utile, inconsapevole che c'erano dei limiti (la maggior parte delle espressioni regolari essendo "universale").
HoldOffHunger

@HoldOffHunger: tutt'altro, purtroppo. Ecco perché esiste un mercato per strumenti come RegexBuddy. Dai un'occhiata a regular-expressions.info/refbasic.html , rimarrai stupito dalle differenze sottili e non così sottili tra i sapori delle
espressioni regolari
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.