Ngoại trừ xác nhận độ dài bằng 0, ký tự trong đầu vào sẽ luôn được sử dụng trong kết hợp. Nếu bạn đã bao giờ trong trường hợp bạn muốn nắm bắt một số ký tự trong chuỗi đầu vào nhiều hơn một lần, bạn sẽ cần xác nhận 0-chiều dài trong regex.
Có một số zero-length khẳng định (ví dụ ^
(đầu vào/line), $
(cuối đầu vào/đầu dòng), \b
(từ ranh giới)), nhưng nhìn ở quanh ((?<=)
tích cực nhìn phía sau và (?=)
tích cực nhìn về phía trước) là cách duy nhất để bạn có thể chụp văn bản chồng chéo từ đầu vào. Phủ định xung quanh ((?<!)
tiêu cực nhìn phía sau, (?!)
tiêu cực nhìn về phía trước) không phải là rất hữu ích ở đây: nếu họ khẳng định sự thật, sau đó chụp bên trong thất bại; nếu họ khẳng định sai, thì trận đấu sẽ thất bại. Các xác nhận này có độ dài bằng 0 (như đã đề cập trước đó), có nghĩa là chúng sẽ khẳng định mà không cần tiêu thụ các ký tự trong chuỗi đầu vào. Họ sẽ thực sự phù hợp với chuỗi rỗng nếu xác nhận vượt qua.
Áp dụng những kiến thức trên, một regex mà làm việc cho trường hợp của bạn sẽ là:
(?=(\w\w))
[Lookahead] (http://stackoverflow.com/questions/320448/overlapping-matches-in-regex) –