Các giải pháp không tiêu thụ các ký tự!
Dưới đây là một từng bước cách nào để xem nó (có thể không phải là tốt nhất, nhưng đó là cách tôi giải thích nó anyway):
nhân vật đầu tiên là L
, động cơ regex so sánh nó với \w+
và đồng ý rằng đó là một trận đấu. Điều tương tự cũng xảy ra cho T
, sau đó E
.
Ở khoảng trống, công cụ regex nhìn thấy khoảng trống trong cụm từ thông dụng, điều đó cũng tốt.
Tiếp theo là dấu mở đầu, nhưng regex nhìn thấy gì? Hãy nhớ rằng các cách giải thích không tiêu thụ các ký tự, sao cho số \(
trong (?<=\()
không thực sự bị tiêu thụ và \(
không khớp với những gì phù hợp với \w+
!
Bạn có thể nghĩ về regex thực sự tiêu thụ các ký tự đó: \w+ \w+
, nhưng với điều kiện trên số \w+
thứ hai, phải tìm thấy giữa các ký tự. Điều kiện có thể được thỏa mãn, nhưng chính biểu thức không khớp với bất kỳ dấu ngoặc đơn nào!
Để làm cho nó phù hợp, bạn nên thêm dấu ngoặc:
\w+ \((?<=\()\w+(?=\))\)
Sau khi nhìn thấy và phù hợp với không gian, động cơ regex thấy (
, mà đồng ý với các biểu hiện cung cấp, nó di chuyển về phía trước.
Động cơ sau đó sẽ thấy T
. Đầu tiên, nó có khớp với ký tự tiếp theo không, \w+
? Có, thứ hai, là có một paren mở trước khi nó? Vâng.
Trước khi tiến về phía trước, nó nhìn thấy một dấu hiệu tích cực. Có một paren đóng ngay phía trước? Không, có e
, nhưng vẫn có thể đáp ứng được \w+
, vì vậy, nó khớp với e
với \w
khác. Điều này tiếp tục như thế này cho đến t
. Có paren đóng sau t
không? Có, do đó tiến hành kiểm tra tiếp theo.
Nó gặp một dấu ngoặc đóng, được so khớp với dấu ngoặc đóng trong biểu thức (lưu ý rằng dấu ngoặc đóng bằng chữ có thể bị bỏ ở đây và bạn sẽ khớp với LTE (Test
thay thế).
Nhưng với tất cả điều này, nó có thể được chỉ là tốt đẹp đã bỏ lookarounds:
\w+ \(\w+\)
Bởi vì họ thêm căng thẳng thêm về động cơ và mặc dù nó không phải là nhìn thấy được trên quy mô nhỏ, nó có thể được đáng kể trên một chuỗi lớn hơn.
Hy vọng rằng, nó sẽ giúp, ngay cả khi đó là một chút!
sử dụng http://gskinner.com/RegExr/: di chuột qua mã regex của bạn để xem giải thích rõ ràng. Xem thêm http://regex101.com/r/zE8qZ8 – hexicle
Tôi đã sử dụng regexr để kiểm tra điều này ngay từ đầu. vẫn không làm cho nó rõ ràng với tôi tại sao nó không làm việc – hamobi