Utilizzare in questo modo:
Regex MyRegex = new Regex(@"(?i:[a-z]+)");
Prefix l'opzione in linea al modello con (?<option>:<pattern>)
. In questo caso l'opzione è "i" per IgnoreCase.
Specificando i due punti sopra, si imposta l'opzione su quel modello. Per rendere l'opzione si applica a tutto il modello è possibile impostare in principio da solo:
@"(?i)[a-z]+"
E 'anche possibile utilizzare più opzioni e accendere e spegnere:
// On: IgnoreCase, ExplicitCapture. Off: IgnorePatternWhitespace
@"(?in-x)[a-z]+"
Questo consente flessibilità in un pattern per abilitare/disabilitare le opzioni in diversi punti di una regex che non è possibile quando si utilizza lo RegexOptions
sull'intero pattern.
Ecco un esempio poco approfondito.Vi incoraggio a giocare con esso per capire quando le opzioni hanno effetto.
string input = "H2O (water) is named Dihydrogen Monoxide or Hydrogen Hydroxide. The H represents a hydrogen atom, and O is an Oxide atom.";
// n = explicit captures
// x = ignore pattern whitespace
// -i = remove ignorecase option
string pattern = @"di?(?nx-i) (hydrogen) | oxide";
var matches = Regex.Matches(input, pattern, RegexOptions.IgnoreCase);
Console.WriteLine("Total Matches: " + matches.Count);
foreach (Match match in matches)
{
Console.WriteLine("Match: {0} - Groups: {1}", match.Value, match.Groups[1].Captures.Count);
}
Console.WriteLine();
// n = explicit captures
// x = ignore pattern whitespace
// -i = remove ignorecase option
// -x = remove ignore pattern whitespace
pattern = @"di?(?nx-i) (?<H> hydrogen) (?-x)|oxide";
matches = Regex.Matches(input, pattern, RegexOptions.IgnoreCase);
Console.WriteLine("Total Matches: " + matches.Count);
foreach (Match match in matches)
{
Console.WriteLine("Match: {0} - Groups: {1}", match.Value, match.Groups["H"].Captures.Count);
}
L'uscita per quanto sopra è:
Total Matches: 3
Match: Dihydrogen - Groups: 0
Match: oxide - Groups: 0
Match: oxide - Groups: 0
Total Matches: 3
Match: Dihydrogen - Groups: 1
Match: oxide - Groups: 0
Match: oxide - Groups: 0
In entrambi i modelli RegexOptions.IgnoreCase
è utilizzato che permette "di" essere case insensitive e corrispondere a "diidrogeno" (capitale D). Poiché l'acquisizione esplicita è attiva, il primo esempio non ha gruppi per (hydrogen)
poiché non utilizza un gruppo denominato, che è il requisito per l'acquisizione esplicita. Il secondo modello ha 1 gruppo poiché utilizza (?<H> hydrogen)
.
Successivamente, si noti che il secondo motivo viene modificato per utilizzare (?-x)|oxide
alla fine. Poiché IgnorePatternWhitespace è disabilitato dopo la cattura dell'idrogeno, il resto del modello deve essere formato correttamente non avendo spazi bianchi aggiuntivi (confrontare con il primo schema) finché (?x)
non viene attivato in seguito nel modello. Questo non ha uno scopo reale, ma mostra semplicemente un uso approfondito delle opzioni inline per dimostrare quando effettivamente danno il via.
Grazie. Quindi, se voglio usare più modificatori, faccio semplicemente '(? Imsx)' invece di '(? I)', per esempio? – Aillyn