... Và thay thế bằng \1
.
Lưu ý: Dot không phải phù hợp Newline
Các caret sẽ phù hợp chỉ vào lúc bắt đầu của một dòng. Vì vậy, các công cụ regex sẽ chỉ cố gắng để phù hợp với phần còn lại của regex đó. Kết hợp dot và star chỉ khớp với toàn bộ dòng, bất kể nội dung của nó, nếu có. Các dấu ngoặc đơn lưu trữ các dòng phù hợp vào backreference đầu tiên.
Tiếp theo, chúng tôi sẽ đối sánh với dấu tách dòng. Tôi đặt question mark vào \r?\n
để làm cho regex này hoạt động với cả tệp văn bản Windows (\r\n
) và UNIX (\n
). Vì vậy, đến thời điểm này, chúng tôi đã kết hợp một dòng và ngắt dòng sau.
Bây giờ, chúng tôi cần kiểm tra xem kết hợp này có bị trùng lặp với một bản sao của cùng một dòng hay không. Chúng tôi làm điều này chỉ đơn giản với \1
. Đây là backreference đầu tiên giữ dòng mà chúng tôi đã so khớp. Các backreference sẽ phù hợp với văn bản rất giống nhau.
Nếu backreference không khớp, kết hợp regex và backreference sẽ bị loại bỏ, và động cơ regex sẽ thử lại ở đầu dòng tiếp theo. Nếu backreference thành công, thì plus symbol trong cụm từ thông dụng sẽ cố gắng khớp với các bản sao bổ sung của dòng. Cuối cùng, dollar symbol buộc động cơ regex kiểm tra xem văn bản được khớp ngược lại có phải là một dòng hoàn chỉnh hay không. Chúng tôi đã biết văn bản phù hợp bởi backreference được bắt đầu bởi một ngắt dòng (phù hợp bởi \ r? \ N). Vì vậy, bây giờ chúng tôi kiểm tra xem nó cũng được theo sau bởi một ngắt dòng hoặc nếu nó là ở phần cuối của tập tin bằng cách sử dụng dollar sign.
Toàn bộ trận đấu trở thành line\nline
(hoặc line\nline\nline
v.v.). Bởi vì chúng tôi đang thực hiện tìm kiếm và thay thế, dòng, các bản sao của nó và các ngắt dòng ở giữa chúng, tất cả đều bị xóa khỏi tệp. Vì chúng ta muốn giữ lại dòng ban đầu, nhưng không phải là bản sao, chúng tôi sử dụng \1
như văn bản thay thế để đưa dòng ban đầu trở lại trong.
Cụm từ thông dụng được thực hiện bởi một số chương trình (SED, PERL, PYTHON, JAVA, một cái gì đó). "Không sử dụng bất kỳ ngôn ngữ lập trình nào" không có ý nghĩa gì cả. Chương trình nào chạy biểu thức chính quy? –
Có, và bên cạnh những gì S.Lott nói, bạn phải chỉ định tốt hơn những gì bạn có nghĩa là "loại bỏ". Xóa tất cả các lần xuất hiện của các dòng trùng lặp? Hoặc loại bỏ tất cả-nhưng-một? Nếu cái sau, cái nào bạn muốn giữ lại, cái đầu tiên hay cái cuối cùng? Hay mệnh lệnh không quan trọng? – Davide
Và cuối cùng, nên chạy trong một lần, hoặc cho phép nhiều đường chuyền? – Davide