2013-02-28 14 views
37

Qualcuno potrebbe spiegare cosa contengono (?i) e (?-i) in regex?Cosa significano `? I` e`? -i` in regex?

(?i)test(?-i) 

ho provato e che corrisponda test, TEST e teSt. Ma non l'ho mai visto prima. Che cosa significa lo ? prima di i? Ho visto questo here.

risposta

50

(?i) avvia la modalità

(?-i)-case insensitive disattiva la modalità case-insensitive

Maggiori informazioni al "Turning Modes On and Off for Only Part of The Regular Expression" section of this page:

moderni sapori regex consentono di applicare modificatori solo a una parte della espressione regolare. Se si inserisce il modificatore (? Ism) nel mezzo di regex, il modificatore si applica solo alla parte della regex al diritto del modificatore . È possibile disattivare le modalità precedendole con un segno meno . Tutte le modalità dopo il segno meno saranno disattivate. Per esempio. (? I-sm) attiva la distinzione tra maiuscole e minuscole e disattiva sia la modalità singola linea sia la modalità multi-linea.

Non tutti gli aromi regex supportano questo. JavaScript e Python applicano tutti i modificatori di modalità all'intera espressione regolare. Non supportano la sintassi (? -ismx), poiché disattivare un'opzione è inutile quando i modificatori di modalità si applicano a tutte le espressioni regolari. Tutte le opzioni sono disattivate per impostazione predefinita.

È possibile testare rapidamente l'aroma regex in uso con i modi di manipolazione Moduli . La regex (? I) te (? - i) st deve corrispondere a test e TEst, ma non a teST o TEST.

16

(?i) acceso senza distinzione tra maiuscole e minuscole, (?-i) si spegne.

Ad esempio, se si è tentato (?i)te(?-i)st, sarebbe partita prova, TEst, tEst, ma non TEST.

+0

grazie per la risposta! – Luccas

2

Preso direttamente da documenti rubino.

Il delimitatore di fine per un'espressione regolare può essere seguita da una o più opzioni singola lettera, che controllano come il modello può eguagliare.

/pat/i - Ignora caso

/pat/m - Trattare un ritorno a capo come un personaggio accompagnato da.

/pat/x - Ignora spazi e commenti nel modello

/pat/o -> Esecuzione # {} interpolazione solo una volta

i, m, e x può essere applicato anche su la livello di sottoespressione con il costrutto (? on-off), che abilita le opzioni e disattiva le opzioni per l'espressione racchiusa tra parentesi nelle parentesi con .

+1

grazie per la risposta! – Luccas

Problemi correlati