2011-11-20 24 views
11

Làm cách nào để tạo một regex mà bắt đầu khớp với vị trí bắt đầu tìm kiếm?Làm cách nào để đối sánh regex ở chỉ mục bắt đầu?

Nói cách khác:

tương đương với \A mà nói, "trận đấu khi bắt đầu tìm kiếm, thậm chí nếu nó không có trong đầu của chuỗi chính" là gì?

new Regex(@"\A\n").IsMatch("!\n", 1); // Should be true, but is false 
+0

@NullUserException ఠ_ఠ: Tôi sẽ làm điều này trong một vòng lặp dài, do đó sẽ rất tốn kém. – Mehrdad

Trả lời

13

gì bạn đang tìm kiếm là \G:

new Regex(@"\G\n").IsMatch("!\n", 1); // It's twue, it's twue! 

Đây là một bất ngờ đối với tôi, thực sự. Tôi biết về \G, nhưng nó thường được mô tả như là một neo phù hợp với sự khởi đầu của đầu vào hoặc kết thúc của trận đấu thành công gần đây nhất, không áp dụng trong đó. Nếu đây là một sự đổi mới .NET, chúng sẽ tạo ra nhiều tiếng ồn hơn về nó; có vẻ như nó rất tiện dụng.

EDIT: Hãy suy nghĩ về điều đó, Java find(int) không hoạt động theo cùng một cách - Tôi thậm chí còn sử dụng nó rộng rãi. Nhưng sau đó họ thêm API "khu vực" trong Java 5, cung cấp khả năng kiểm soát tốt hơn nhiều và tôi đã quên mất thành ngữ này. Tôi không bao giờ nghĩ tìm nó trong .NET.

+0

Tôi không thể tin rằng đó là thứ hai! +1 – Mehrdad

+0

+1 Ồ, bạn đã tìm thấy nó! Và có vẻ như nó đã ở đó từ [.NET 1.1] (http://msdn.microsoft.com/en-us/library/h5181w5w (v = VS.71) .aspx) – NullUserException

3

Ooooh Tôi chỉ nhớ một cái gì đó tôi muốn đọc ~ 4-5 năm trước đây trong một cuốn sách về Regex.Match ...

Các quá tải không hành xử theo cách chúng ta mong đợi họ!

Các quá tải

Regex.Match(string input, int index, int length) 

định một chuỗi để tìm kiếm, trong khi tình trạng quá tải

Regex.Match(string input, int index) 

chỉ đơn thuần là mệnh lệnh mà việc tìm kiếm nên bắt đầu!

(Một trường hợp nó lá ra bắt đầu từ một tùy vị trí trong một chuỗi, tôi đoán.)

Hy vọng điều này là làm sáng tỏ cho mọi người ...

+0

+1. Đúng, chỉ ra 'Regex mới (@ "\ A \ n"). Kết hợp ("! \ N", 1, 2) .Thành công' cũng là thứ hai. Những con quỷ nhỏ khó hiểu đó! –

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