Szukam prostego wyrażenia regularnego, które pasowałoby do tego samego znaku powtarzanego więcej niż 10 razy. Na przykład, jeśli mam dokument zaśmiecony poziomymi liniami:
=================================================
Dopasuje linię =
znaków, ponieważ jest powtarzana więcej niż 10 razy. Zauważ , że chciałbym, żeby to działało dla każdej postaci.
Odpowiedzi:
Wymagane wyrażenie regularne to
/(.)\1{9,}/
.Test:
Tutaj
\1
nazywa się odwołaniem wstecznym. Odnosi się do tego, co jest oznaczone kropką.
między nawiasami,(.)
a następnie{9,}
prosi o dziewięć lub więcej tego samego znaku. W ten sposób pasuje do dziesięciu lub więcej dowolnych znaków.Chociaż powyższy skrypt testowy jest w Perlu, jest to bardzo standardowa składnia wyrażeń regularnych i powinna działać w każdym języku. W niektórych wariantach możesz potrzebować więcej odwrotnych ukośników, np. Emacs zmusi cię do napisania
\(.\)\1\{9,\}
tutaj.Jeśli cały ciąg powinien składać się z 9 lub więcej identycznych znaków, dodaj kotwice wokół wzoru:
źródło
W Pythonie możesz użyć
(.)\1{9,}
przykład:
Wynik:
źródło
.
pasuje do dowolnego znaku. Używany w połączeniu ze wspomnianymi już aparatami ortodontycznymi:źródło
grep -E '([=o])\1{10}' test
igrep -E '([=o]){10}' test
działają dobrze z twoim przykładem (zwróć uwagę na brak\1
w drugim poleceniu). Ale poleceniegrep -E '([=o])\1{10}' <<< '==o==o==o==o==o==o===o==o==='
nie pasuje do linii! Jednak komenda bez\1
meczów linia:grep -E '([=o]){10}' <<< '==o==o==o==o==o==o===o==o==='
. Czy mógłbyś to wyjaśnić? Pozdrawiam;)W niektórych aplikacjach musisz usunąć ukośniki, aby działało.
albo to:
źródło
użyj operatora {10,}:
źródło
Możesz także użyć programu PowerShell, aby szybko zamienić słowa lub powtórzenia znaków. PowerShell jest przeznaczony dla systemu Windows. Obecna wersja to 3.0.
źródło
preg_replace
Przykład PHP :Tutaj
[a-z]
uderza w znak,()
a następnie pozwala na użycie go z\\1
odwołaniem wstecznym, który próbuje dopasować inny ten sam znak (zauważ, że jest to już skierowane na 2 kolejne znaki), a zatem:Jeśli tak:
oznaczałoby to wymazanie 3 kolejnych powtarzających się znaków, wypisując:
źródło
dopasowania,
=
które powtarza się 10 lub więcej razy.źródło
perl -e 'print "NO" if "abcdefghijklmno" =~ /.{10,}/;'
Nieco bardziej ogólny przykład PowerShell. W PowerShell 7 dopasowanie jest podświetlane, łącznie z ostatnią spacją (czy możesz wyróżnić na stosie?).
źródło