... I zastąpienie przez \1
.
Uwaga: Dot nie musi pasować do nowej linii
caret będzie pasował tylko na początku linii. Tak więc silnik regex będzie próbował tylko dopasować pozostałą część regexu. Kombinacja dot i star po prostu dopasowuje całą linię, niezależnie od jej zawartości, jeśli taka istnieje. Nawiasy przechowuje dopasowaną linię do pierwszej referencji zwrotnej.
Następnie dopasujemy separator linii. Umieszczam question mark w \r?\n
, aby zrobić to wyrażenie regularne z plikami tekstowymi Windows (\r\n
) i UNIX (\n
). Do tego momentu dopasowaliśmy linię i następujący podział linii.
Teraz musimy sprawdzić, czy po tej kombinacji występuje duplikat tej samej linii. Robimy to po prostu z \1
. Jest to pierwsza referencja zwrotna, która zawiera dopasowaną linię. Odniesienie będzie pasować do tego samego tekstu.
Jeśli odwołanie zwrotne nie pasuje, dopasowanie regex i odwołanie zwrotne są odrzucane, a silnik wyrażeń regularnych próbuje ponownie na początku następnego wiersza. Jeśli odwołanie zwrotne się powiedzie, w wyrażeniu regularnym plus symbol spróbuje dopasować dodatkowe kopie wiersza. Na koniec, dollar symbol zmusza silnik regex do sprawdzenia, czy tekst dopasowany przez referencję zwrotną jest kompletną linią. Wiemy już, że tekst dopasowany przez referencję wsteczną jest poprzedzony linią podziału (dopasowaną przez \ r? \ N). Dlatego teraz sprawdzamy, czy po nim występuje podział wiersza lub czy znajduje się na końcu pliku przy użyciu dollar sign.
Cały mecz zamieni się na line\nline
(lub line\nline\nline
itd.). Ponieważ przeprowadzamy wyszukiwanie i zamieniamy, wiersz, jego duplikaty i linia między nimi są usuwane z pliku. Ponieważ chcemy, aby zachować oryginalną linię, ale nie duplikaty, używamy \1
jako tekstu zastępczego umieścić oryginalną linię widok.
Wyrażenia regularne są wykonywane przez niektóre programy (SED, PERL, PYTHON, JAVA, coś). "Nie używaj żadnego języka programowania" nie ma sensu. Który program uruchamia wyrażenie regularne? –
Tak, a poza tym, co powiedział S.Lott, musisz określić lepiej, co masz na myśli przez "usuń". Usunąć wszystkie wystąpienia zduplikowanych linii? Lub usunąć all-but-one? Jeśli to drugie, które chciałbyś zachować, pierwsze czy ostatnie? Czy kolejność nie ma znaczenia? – Davide
Wreszcie, czy powinien przebiegać w jednym przejściu, czy dozwolone są wielokrotne przebiegi? – Davide