Tôi cần tìm regex cho []Regex cho bất kỳ thứ gì giữa []
Ví dụ: nếu chuỗi là - Xin chào [Đây là [Tag] của tôi.
Nó sẽ trả về Stack, Tag, Tìm
Tôi cần tìm regex cho []Regex cho bất kỳ thứ gì giữa []
Ví dụ: nếu chuỗi là - Xin chào [Đây là [Tag] của tôi.
Nó sẽ trả về Stack, Tag, Tìm
Khá đơn giản, bạn chỉ cần (1) thoát khỏi dấu ngoặc với gạch chéo ngược, và (2) sử dụng (.*?)
để nắm bắt được nội dung.
\[(.*?)\]
Dấu ngoặc đơn là nhóm chụp, chúng nắm bắt nội dung của chúng để sử dụng sau này. Dấu chấm hỏi sau .*
làm cho không phù hợp với tham lam. Điều này có nghĩa là nó sẽ khớp với trận đấu ngắn nhất có thể, thay vì trận đấu dài nhất có thể. Sự khác biệt giữa tham lam và tham lam xuất hiện khi bạn có nhiều kết quả phù hợp trong một dòng:
Hi [Stack], Here is my [Tag] which i need to [Find].
^______________________________________________^
Kết hợp tham lam sẽ tìm chuỗi dài nhất có thể giữa hai bộ ngoặc vuông. Điều đó không đúng. Một trận đấu không tham lam sẽ tìm ra ngắn nhất:
Hi [Stack], Here is my [Tag] which i need to [Find].
^_____^
Anyways, mã sẽ kết thúc looking like:
string regex = @"\[(.*?)\]";
string text = "Hi [Stack], Here is my [Tag] which i need to [Find].";
foreach (Match match in Regex.Matches(text, regex))
{
Console.WriteLine("Found {0}", match.Groups[1].Value);
}
\[([\w]+?)\]
nên làm việc. Bạn có thể phải thay đổi nhóm phù hợp nếu bạn cần bao gồm các ký tự đặc biệt.
Điều này hoạt động tốt hơn một chút so với câu trả lời hiện được gắn thẻ bởi vì nó có quyền kiểm soát tốt hơn những thứ như sau: "Test [test] [test [test]" Câu trả lời được gắn thẻ sẽ bao gồm cả stray [trong trận đấu, trong khi regex này sẽ không . – StronglyTyped
Tùy thuộc vào những gì bạn có nghĩa là môi trường:
\[([^\]]+)]
Ah, .NET ... Đây là một regex Emacs. :-) –
Tôi nghĩ bạn đã bỏ lỡ một ']' ngay cả trong cú pháp Emacs. – kennytm
Tôi đã tự do thay đổi nó thành một .NET tương thích. Lưu ý rằng ']' chỉ cần thoát bên trong bộ ký tự, không phải bên ngoài nó (mặc dù nó không làm tổn thương để thoát khỏi nó ...). –
cú pháp NET, chăm sóc nhiều dấu ngoặc nhúng:
\[ ((?: \\. | (?<OPEN> \[) | (?<-OPEN> \]) | [^\]])*? (?(OPEN)(?!))) \]
này đếm số mở [
phần trong OPEN
và chỉ thành công nếu OPEN
là 0 cuối cùng.
Trên nền tảng nào? Trong ngôn ngữ lập trình nào? –
asp.net. Tôi đang sử dụng Regex.IsMatch() – Ankit
Có thể có các kết quả lồng nhau: 'foo [bar [baz]] done' mà bạn muốn lấy' bar [baz] '? Hoặc có lẽ 'foo [bar \\] baz] done' nơi bạn muốn lấy' bar] baz'? Có thể có (các) dòng mới giữa '[' và ']' không? –