Sử dụng tính năng theo cách này:
Regex MyRegex = new Regex(@"(?i:[a-z]+)");
Làm tiền tố tùy chọn nội tuyến cho mẫu của bạn bằng (?<option>:<pattern>)
. Trong trường hợp này, tùy chọn là "i" cho IgnoreCase.
Bằng cách chỉ định dấu hai chấm phía trên, bạn đang đặt tùy chọn cho mẫu đó. Để thực hiện các tùy chọn áp dụng cho toàn bộ mô hình bạn có thể đặt nó trong đầu ngày của riêng mình:
@"(?i)[a-z]+"
Nó cũng có thể sử dụng nhiều tùy chọn và bật chúng lên và tắt:
// On: IgnoreCase, ExplicitCapture. Off: IgnorePatternWhitespace
@"(?in-x)[a-z]+"
này cho phép tính linh hoạt trong một mẫu để bật/tắt tùy chọn tại các điểm khác nhau của một regex không thể thực hiện được khi sử dụng RegexOptions
trên toàn bộ mẫu.
Dưới đây là ví dụ hơi sâu.Tôi khuyến khích bạn chơi với nó để hiểu khi nào các tùy chọn có hiệu lực.
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);
}
Kết quả cho ở trên là:
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
Trong cả hai mẫu RegexOptions.IgnoreCase
được sử dụng cho phép "di" là trường hợp nhạy cảm và do đó phù hợp với "dihydrogen" (vốn D). Kể từ khi capturing rõ ràng là trên, ví dụ đầu tiên không có bất kỳ nhóm cho (hydrogen)
vì nó không sử dụng một nhóm được đặt tên, đó là yêu cầu cho việc nắm bắt rõ ràng. Mẫu thứ hai có 1 nhóm vì nó sử dụng (?<H> hydrogen)
.
Tiếp theo, hãy lưu ý rằng mẫu thứ hai được sửa đổi để sử dụng (?-x)|oxide
ở cuối. Kể từ IgnorePatternWhitespace bị tắt sau khi chụp hydro, phần còn lại của mẫu phải được tạo chính xác bằng cách không có khoảng trống bổ sung (so với mẫu đầu tiên) cho đến khi (?x)
được bật sau trong mẫu. Điều này phục vụ không có mục đích thực sự nhưng chỉ cho thấy một cách sử dụng chiều sâu của các tùy chọn nội tuyến để chứng minh khi họ thực sự đá.
Cảm ơn. Vì vậy, nếu tôi muốn sử dụng nhiều công cụ sửa đổi, tôi chỉ làm '(? Imsx)' thay vì '(? I)', chẳng hạn? – Aillyn