Ricerca…


Osservazioni

Lezioni semplici

regex fiammiferi
[abc] Uno dei seguenti caratteri: a , b , o c
[az] Qualsiasi carattere da a a z , compreso (questo è chiamato intervallo)
[0-9] Qualsiasi cifra da 0 a 9 inclusi

Classi comuni

Alcuni gruppi / intervalli di caratteri sono usati così spesso, hanno abbreviazioni speciali:

regex fiammiferi
\w Caratteri alfanumerici più il carattere di sottolineatura (noto anche come "caratteri di parole")
\W Caratteri non parola (uguali a [^\w] )
\d Cifre ( più larghe di [0-9] poiché includono cifre persiane, indiane ecc.)
\D Non digitate ( meno di [^0-9] dal momento che rifiutano le cifre persiane, quelle indiane ecc.)
\s Caratteri di spazi bianchi (spazi, tabulazioni, ecc.) Nota : può variare a seconda del motore / contesto
\S Caratteri non spazi bianchi

Classi di negazione

Un segno di omissione (^) dopo la parentesi quadra di apertura funziona come una negazione dei caratteri che lo seguono. Questo corrisponderà a tutti i personaggi che non sono nella classe di caratteri.

Le classi di caratteri negate corrispondono anche ai caratteri di interruzione di riga, quindi se questi non devono essere confrontati, i caratteri di interruzione di riga specifici devono essere aggiunti alla classe (\ r e / o \ n).

regex fiammiferi
[^AB] Qualsiasi carattere diverso da A e B
[^\d] Qualsiasi carattere, tranne le cifre

Le basi

Supponiamo di avere una lista di squadre, chiamate così: Team A , Team B , ..., Team Z Poi:

  • Team [AB] : Questo corrisponderà alla Team A o alla Team B
  • Team [^AB] : Questo corrisponderà a qualsiasi squadra eccetto la Team A o la Team B

Spesso abbiamo bisogno di abbinare caratteri che "appartengono" insieme in un contesto o in un altro (come le lettere dalla A alla Z ), e questo è ciò che le classi di caratteri sono per.

Abbina parole diverse e simili

Considera la classe del personaggio [aeiou] . Questa classe di caratteri può essere utilizzata in un'espressione regolare per abbinare un insieme di parole simili pronunciate.

b[aeiou]t corrisponde:

  • pipistrello
  • scommessa
  • po
  • Bot
  • ma

Non corrisponde:

  • incontro
  • BTT
  • bt

Classi di personaggi sulla propria partita, uno e un solo personaggio alla volta.

Corrispondenza non-alfanumerici (classe di caratteri negata)

[^0-9a-zA-Z]

Questo corrisponderà a tutti i caratteri che non sono né numeri né lettere (caratteri alfanumerici). Se anche il carattere di sottolineatura _ deve essere negato, l'espressione può essere abbreviata in:

[^\w]

O:

\W

Nelle seguenti frasi:

  1. Ciao come va?

  2. Non posso aspettare per il 2017 !!!

I seguenti personaggi corrispondono:

  1. , , , ' , ? e il carattere di fine riga.

  2. ' , , ! e il carattere di fine riga.

NOTA UNICODE
Si noti che alcuni sapori con supporto delle proprietà dei caratteri Unicode possono interpretare \w e \W come [\p{L}\p{N}_] e [^\p{L}\p{N}_] che significa altre lettere Unicode e saranno inclusi anche i caratteri numerici (vedere i documenti PCRE ). Ecco un test PCRE \w : inserisci la descrizione dell'immagine qui

In .NET, \w = [\p{Ll}\p{Lu}\p{Lt}\p{Lo}\p{Lm}\p{Mn}\p{Nd}\p{Pc}] , e nota che non corrisponde a \p{Nl} e \p{No} differenza di PCRE (vedi la documentazione di \w .NET ):

Immagine

Si noti che per qualche motivo, le lettere minuscole Unicode 3.1 (come 𝐚𝒇𝓌𝔨𝕨𝗐𝛌𝛚 ) non corrispondono.

Java (?U)\w corrisponderà a un mix di ciò che \w corrisponde in PCRE e .NET: inserisci la descrizione dell'immagine qui

Corrispondenza senza cifre (classe di caratteri negata)

[^0-9]

Questo corrisponderà a tutti i caratteri che non sono cifre ASCII.

Se anche le cifre Unicode devono essere negate, è possibile utilizzare la seguente espressione, a seconda delle impostazioni di gusto / lingua:

[^\d]

Questo può essere abbreviato in:

\D

Potrebbe essere necessario abilitare il supporto delle proprietà dei caratteri Unicode in modo esplicito utilizzando il modificatore u o programmaticamente in alcune lingue, ma ciò potrebbe non essere ovvio. Per convogliare esplicitamente l'intento, è possibile utilizzare il seguente costrutto (quando il supporto è disponibile):

\P{N}

Che per definizione significa: qualsiasi carattere che non sia un carattere numerico in nessun copione. In un intervallo di caratteri negato, puoi usare:

[^\p{N}]

Nelle seguenti frasi:

  1. Ciao come va?

  2. Non posso aspettare per il 2017 !!!

I seguenti personaggi saranno abbinati:

  1. , , , ' , ? , il carattere di fine riga e tutte le lettere (minuscole e maiuscole).

  2. ' , , ! , il carattere di fine riga e tutte le lettere (minuscole e maiuscole).

Classe di personaggio e problemi comuni affrontati dal principiante

1. Classe di caratteri

La classe di caratteri è indicata da [] . Il contenuto all'interno di una classe di caratteri viene considerato single character separately come single character separately . ad esempio, supponiamo di usarlo

[12345]

Nell'esempio sopra, significa match 1 or 2 or 3 or 4 or 5 . In parole semplici, può essere inteso come or condition for single characters ( stress su singolo carattere )

1.1 Parola di cautela

  • Nella classe di caratteri, non esiste il concetto di abbinamento di una stringa. Quindi, se stai usando regex [cat] , non significa che dovrebbe corrispondere alla parola cat letteralmente, ma significa che dovrebbe corrispondere a c o a o t . Questo è un malinteso molto comune tra le persone che sono più recenti a regex.
  • A volte le persone usano | (alternanza) all'interno della classe del personaggio pensando che agirà come una OR condition errata. ad esempio, usare [a|b] significa effettivamente abbinare a o | (letteralmente) o b .

2. Intervallo nella classe di caratteri

L'intervallo nella classe di caratteri è denotato usando - segno. Supponiamo di voler trovare qualsiasi carattere negli alfabeti inglesi dalla A alla Z Questo può essere fatto usando la seguente classe di caratteri

[A-Z]

Questo potrebbe essere fatto per qualsiasi intervallo ASCII o unicode valido. Le gamme più comunemente utilizzate includono [AZ] , [az] o [0-9] . Inoltre queste gamme possono essere combinate in classi di caratteri come

[A-Za-z0-9]

Ciò significa che corrisponde a qualsiasi carattere nell'intervallo da A to Z o da A to Z o a to z 0 to 9 . L'ordine può essere qualsiasi cosa. Quindi quanto sopra è equivalente a [a-zA-Z0-9] a condizione che l'intervallo definito sia corretto.

2.1 Parola di cautela

  • A volte scrivendo intervalli per persone dalla A alla Z scrivilo come [Az] . Questo è sbagliato nella maggior parte dei casi perché stiamo usando z invece di Z Quindi questo corrisponde a qualsiasi carattere compreso tra 65 ASCII (da A) a 122 (di z) che include molti caratteri non intenzionali dopo l'intervallo ASCII 90 (di Z). TUTTAVIA , [Az] può essere usato per abbinare tutte le lettere [a-zA-Z] in espressioni regolari in stile POSIX quando le regole di confronto sono impostate per una lingua specifica. [[ "ABCEDEF[]_abcdef" =~ ([Az]+) ]] && echo "${BASH_REMATCH[1]}" su Cygwin con LC_COLLATE="en_US.UTF-8" produce ABCEDF . Se si imposta LC_COLLATE su C (su Cygwin, fatto con export ), verrà fornito l' ABCEDEF[]_abcdef previsto.

  • Significato di - classe del personaggio interno è speciale. Denota gamma come spiegato sopra. Cosa succede se vogliamo corrispondere - personaggio letteralmente? Non possiamo metterlo da nessuna parte altrimenti indicherà intervalli se è posto tra due caratteri. In questo caso dobbiamo mettere - in partenza della classe di caratteri come [-AZ] o in fine della classe di caratteri come [AZ-] o escape it se si desidera utilizzarlo in mezzo come [AZ\-az] .

3. Classe di caratteri negata

La classe di caratteri negata è denotata da [^..] . Il segno di omissione ^ indica corrispondere qualsiasi carattere tranne quello presente nella classe di caratteri. per esempio

[^cat]

significa che corrisponde a qualsiasi carattere tranne c o a o t .

3.1 Parola di cautela

  • Il significato del segno di caret ^ esegue la mappatura alla negazione solo se si trova all'inizio della classe di caratteri. Se è altrove nella classe di caratteri, viene trattato come carattere letterale senza alcun significato speciale.
  • Alcune persone scrivono espressioni regolari come [^] . Nella maggior parte dei motori regex, questo dà un errore. Il motivo è che quando stai usando ^ nella posizione iniziale, si aspetta almeno un carattere che dovrebbe essere negato. In JavaScript , però, questo è un costrutto valido che combina tutto tranne che nulla , cioè corrisponde a qualsiasi simbolo possibile (ma diacritico, almeno in ES5).

Classi di caratteri POSIX

Le classi di caratteri POSIX sono sequenze predefinite per un determinato set di caratteri.

Classe di carattere Descrizione
[:alpha:] Caratteri alfabetici
[:alnum:] Caratteri alfabetici e cifre
[:digit:] cifre
[:xdigit:] Cifre esadecimali
[:blank:] Spazio e tab
[:cntrl:] Caratteri di controllo
[:graph:] Caratteri visibili (qualsiasi cosa eccetto spazi e caratteri di controllo)
[:print:] Caratteri e spazi visibili
[:lower:] Lettere minuscole
[:upper:] Lettere maiuscole
[:punct:] Punteggiatura e simboli
[:space:] Tutti i caratteri di spazi vuoti, comprese le interruzioni di riga

Sono disponibili classi di caratteri aggiuntive a seconda dell'implementazione e / o della locale.

Classe di carattere Descrizione
[:<:] Inizio della parola
[:>:] Fine parola
[:ascii:] Caratteri ASCII
[:word:] Lettere, cifre e sottolineatura. Equivalente a \w

Per usare l'interno di una sequenza di parentesi (o classe di caratteri), dovresti includere anche le parentesi quadre. Esempio:

[[:alpha:]]

Questo corrisponderà a un carattere alfabetico.

[[:digit:]-]{2}

Questo corrisponderà a 2 caratteri, che sono o cifre o - . Il seguente corrisponderà:

  • --
  • 11
  • -2
  • 3-

Ulteriori informazioni sono disponibili su: Regular-expressions.info



Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow