Saya mencari persamaan reguler sederhana untuk mencocokkan karakter yang sama yang diulang lebih dari 10 kali atau lebih. Jadi misalnya, jika saya memiliki dokumen yang dikotori dengan garis horizontal:
=================================================
Ini akan cocok dengan baris =
karakter karena diulang lebih dari 10 kali. Perhatikan bahwa saya ingin ini berfungsi untuk karakter apa pun .
Jawaban:
Regex yang Anda butuhkan adalah
/(.)\1{9,}/
.Uji:
Di sini yang
\1
disebut referensi latar. Ini merujuk pada apa yang ditangkap oleh titik di.
antara tanda kurung(.)
dan kemudian{9,}
meminta sembilan atau lebih karakter yang sama. Jadi ini cocok dengan sepuluh atau lebih karakter tunggal apa pun.Meskipun skrip pengujian di atas ada di Perl, ini adalah sintaks regex yang sangat standar dan harus berfungsi dalam bahasa apa pun. Pada beberapa varian Anda mungkin perlu menggunakan lebih banyak garis miring terbalik, misalnya Emacs akan membuat Anda menulis di
\(.\)\1\{9,\}
sini.Jika seluruh string harus terdiri dari 9 atau lebih karakter identik, tambahkan jangkar di sekitar pola:
sumber
Dengan Python, Anda bisa menggunakan
(.)\1{9,}
contoh:
Keluaran:
sumber
.
cocok dengan karakter apapun. Digunakan bersama dengan kurung kurawal yang telah disebutkan:sumber
grep -E '([=o])\1{10}' test
dangrep -E '([=o]){10}' test
berfungsi dengan baik dengan contoh Anda (perhatikan kekurangan\1
di perintah kedua). Tapi perintahnyagrep -E '([=o])\1{10}' <<< '==o==o==o==o==o==o===o==o==='
tidak cocok dengan barisnya! Namun perintah tanpa\1
pertandingan baris:grep -E '([=o]){10}' <<< '==o==o==o==o==o==o===o==o==='
. Bisakah Anda menjelaskan? Cheers;)Pada beberapa aplikasi, Anda perlu menghapus garis miring agar berfungsi.
atau ini:
sumber
gunakan operator {10,}:
sumber
Anda juga dapat menggunakan PowerShell untuk mengganti kata atau reptil karakter dengan cepat . PowerShell untuk Windows. Versi saat ini adalah 3.0.
sumber
preg_replace
Contoh PHP :Di sini
[a-z]
mengenai karakter,()
kemudian memungkinkan untuk digunakan dengan\\1
referensi latar yang mencoba mencocokkan karakter lain yang sama (perhatikan ini sudah menargetkan 2 karakter berturut-turut), jadi:Jika Anda melakukannya:
yang akan menghapus 3 karakter berulang berturut-turut, menghasilkan:
sumber
pertandingan
=
yang diulangi 10 kali atau lebih.sumber
perl -e 'print "NO" if "abcdefghijklmno" =~ /.{10,}/;'
Contoh PowerShell yang sedikit lebih umum. Di PowerShell 7, pertandingan disorot termasuk spasi terakhir (dapatkah Anda sorot di tumpukan?).
sumber