Domanda

Ci sono molte domande e risposte qui su StackOverflow che assumono una "lettera" può essere abbinato in un'espressione regolare da [a-zA-Z]. Tuttavia, con Unicode ci sono molti altri personaggi che maggior parte delle persone considerano una lettera (tutte le lettere greche, Cyrllic .. e molti altri. Unicode definisce molti blocchi ciascuno dei quali può avere 'lettere'.

La definizione Java definisce le classi Posix per cose come caratteri alfabetici, ma che è specificato per funzionare solo con US-ASCII. Le classi di caratteri predefiniti definiscono parole consistere di [a-zA-Z_0-9], che anche esclude molte lettere.

Così come si fa correttamente partita contro le stringhe Unicode? C'è qualche altra libreria che ottiene questo diritto?

È stato utile?

Soluzione

Ecco una molto bella spiegazione:

http://www.regular-expressions.info/unicode.html

Alcuni indizi:

"Java e .NET, purtroppo, fanno \X non supporto (ancora). Utilizzare \P{M}\p{M}* come sostituto. Per adattarsi a qualsiasi numero di grafemi, uso (?:\P{M}\p{M}*)+ invece di \X+".

"In Java, l'espressione regolare gettone \uFFFF solo corrisponde al punto di codice specificato, anche quando si accende l'equivalenza canonica. Tuttavia, la stessa sintassi \uFFFF è usato anche per inserire caratteri Unicode in stringhe letterali nel codice sorgente di Java. Pattern.compile("\u00E0") volontà abbinare sia il codice-punto-singolo e doppio-code-point codifiche di à, mentre Pattern.compile("\\u00E0") corrisponde solo la versione codice a punto singolo. Ricordate che quando si scrive una regex come un letterale stringa di Java, i backslash devono essere sfuggito. l'ex Java codice viene compilato il à regex, mentre il secondo compila \u00E0. a seconda di quello che stai facendo, la differenza può essere significativo ".

Altri suggerimenti

Stai parlando di categorie Unicode, come le lettere? Questi sono accompagnati da una regex della forma \p{CAT}, dove "CAT" è il codice categoria come L per qualsiasi lettera, o una sottocategoria come Lu per maiuscolo o Lt per il titolo e minuscole.

Citando il JavaDoc di java.util .regex.Pattern .

Il supporto Unicode

Questa classe è conforme Piano 1 di Unicode Technical standard # 18: Unicode Linee guida espressioni regolari , più RL2.1 Canonical equivalenti .

sequenze di escape Unicode come \ U2014 nel codice sorgente di Java sono come indicato nell §3.3 della Java Specification Language. Come sequenze di escape sono anche implementate direttamente dal espressioni regolari parser in modo che sfugge Unicode possono essere utilizzato nelle espressioni che si leggono da File o dalla tastiera. Così il stringhe "\ u2014" e "\\ u2014", mentre Non uguale, compilazione nella stessa modello, che corrisponde al carattere con valore esadecimale 0x2014.

blocchi e categorie Unicode sono scritto con la \ p \ e costrutti P come in Perl. \ P {prop} viene soddisfatta se il input ha la proprietà prop, mentre \ P {prop} non corrisponde se l'ingresso ha quella proprietà. I blocchi sono specificato con il prefisso In, come in InMongolian. Categorie possono essere specificata con il prefisso opzionale: Sia \ p {L} e \ p {} ISL indicare la categoria di lettere Unicode. blocchi e le categorie possono essere utilizzati sia all'interno e al di fuori di una classe di caratteri.

Le categorie supportati sono quelli di Lo standard Unicode nella versione specificata dalla classe di caratteri. Il nomi delle categorie sono quelle definite in Standard, sia normativo e Informativo. I nomi dei blocchi supportati dal modello sono i nomi dei blocchi validi accettato e definito da UnicodeBlock.forName.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top