2012-12-02 26 views
6

Tôi đang gặp khó khăn khi yêu cầu Regex bỏ qua bất kỳ chuỗi thoát nào.Bỏ qua các chuỗi thoát Regex C#

Dưới đây là một số mã ví dụ:

string input = "?"; 
foreach (Match m in Regex.Matches(input, "?")) 
     { 
     ... 
     } 

Nhưng khi nó được thực thi, nó ném các lỗi sau: "?" phân tích cú pháp - Định lượng {x, y} không theo sau.

Tôi chỉ muốn "?" để được xử lý như một chuỗi.

Cảm ơn.

EDIT: Tôi cũng đã cố gắng:

foreach (Match m in Regex.Matches(input, "\?")) 
       { 
... 
       } 

nào nói với tôi rằng là không được công nhận như là một chuỗi thoát hợp lệ.

Tôi cũng đã thử:

foreach (Match m in Regex.Matches(input, "\x3f")) 
       { 
... 
       } 

Trả lời

11

NET cung cấp một chức năng mà không bất kỳ thoát cho bạn tự động. Bất cứ khi nào bạn có một số loại chuỗi đầu vào, mà bạn muốn kết hợp nghĩa đen (chỉ các nhân vật mà ở đó), nhưng bạn biết bạn sử dụng một tìm kiếm regex, sau đó chạy chúng thông qua phương pháp này:

string pattern = Regex.Escape(literalString); 

này sẽ xử lý bất kỳ ký tự nào có thể là ký tự meta cho cụm từ thông dụng.

MSDN on Escape

+0

Cảm ơn bạn đã giải quyết được vấn đề của tôi! (: –

2

Bạn cần phải thoát khỏi ? cho động cơ regex, như ? có một ý nghĩa đặc biệt như một đại lượng theo biểu thức thông thường:

\? 

Bạn cũng sẽ muốn sử dụng verbatim string literals để \ không có ý nghĩa đặc biệt như chuỗi thoát chuỗi C# - hai số này tương đương - @"\?""\\?".

Vì vậy:

string input = "?"; 
foreach (Match m in Regex.Matches(input, @"\?")) 
{ 
    ... 
} 

Nói chung, dấu chéo ngược \ là dãy thoát trong biểu thức thông thường.

+0

Tôi đã thử điều đó nhưng không được nhận dạng là chuỗi thoát. Tôi cũng đã thử thay thế "?" với "\ x3f" không có kết quả. Và những gì về các chuỗi khác như: "+"? –

+0

@ user1869353 - Có, bạn cần phải nhớ rằng bạn đang làm việc với các ngôn ngữ _two_ - có lối thoát chuỗi C# và thoát khỏi regex. – Oded

+0

Sử dụng hai dấu gạch chéo chứ không phải –

0

Sử dụng được xây dựng trong phương pháp Escape.

Regex.Escape("/") 

Xem thêm MSDN RegEx.Escape()

Các vấn đề liên quan