2010-04-20 29 views
6

Tôi tự hỏi liệu có thể lấy MatchCollection với tất cả các kết quả phù hợp ngay cả khi có giao lộ giữa chúng hay không.đối sánh regex với giao lộ trong C#

string input = "a a a"; 
Regex regex = new Regex("a a"); 
MatchCollection matches = regex.Matches(input); 
Console.WriteLine(matches.Count); 

Mã này trả về 1, nhưng tôi muốn nó trả lại 2. Làm thế nào để đạt được nó?
Cảm ơn sự giúp đỡ của bạn.

Trả lời

7
string input = "a a a"; 
Regex regexObj = new Regex("a a"); 
Match matchObj = regexObj.Match(input); 
while (matchObj.Success) { 
    matchObj = regexObj.Match(input, matchObj.Index + 1); 
} 

sẽ lặp qua chuỗi bắt đầu lần lặp tiếp theo một ký tự sau vị trí của trận đấu trước, do đó tìm tất cả các kết quả phù hợp.

+0

Có vẻ như những gì tôi cần. Cảm ơn. – StuffHappens

+0

+1 Rất đẹp Tôi sẽ giới thiệu một cái gì đó tương tự với string.indexOf giả định rằng chuỗi tìm kiếm là một chuỗi vani. Tôi tự hỏi nếu có một regex phức tạp mà phương pháp này sẽ không làm việc cho ..... hmmm – juharr

0

Bạn có thể làm điều đó trong một vòng lặp while bằng cách thay thế "a a" bằng "a" và đối sánh nó một lần khác với regex cho đến khi không có kết quả phù hợp.

+0

Ví dụ này được đơn giản hóa. Tôi có chuỗi đầu vào phức tạp hơn nhiều và regex phức tạp hơn nhiều. Vì vậy, giải pháp của bạn sẽ không hoạt động trong trường hợp đó. Dù sao cũng cảm ơn bạn. – StuffHappens

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