Thứ Tư, 27 tháng 2, 2013

So khớp với ký tự bất kỳ và tính luôn cả ký tự xuống dòng \n trong Regex C#

Sử dụng RegexOptions.Singleline

Mình muốn lấy giá trị nằm trong 2 đoạn <tag> và </tag>

string value = Regex.Match("<tag>av</tag>", @"<tag>(.*?)</tag>").Groups[1].Value;

Kết quả: value = 'av'

Đoạn code trên sẽ chạy ok nếu giá trị nằm trong <tag> và </tag> không có ký tự \n. Vì (.*?) chỉ khớp với các ký tự bất kỳ trừ ký tự \n.

string value = Regex.Match("<tag>av\n</tag>", @"<tag>(.*?)</tag>").Groups[1].Value;

Kết quả : value =''

Sử dụng option: RegexOptions.Singleline sẽ làm cách dùng ký tự  dot (.) tính luôn cả giá trị \n.

Specifies single-line mode. Changes the meaning of the dot (.) so it matches every character (instead of every character except \n).

string value = Regex.Match("<tag>av\n</tag>", @"<tag>(.*?)</tag>", RegexOptions.Singleline).Groups[1].Value;

Kết quả: value= 'av\n'

Không có nhận xét nào :

Đăng nhận xét