Regex Pola Perpustakaan

Lebih dari 60 pola regex siap pakai. Cari, salin, dan uji online.

Tentang pustaka ini

Ini adalah koleksi yang diatur dan dapat dicari dari lebih dari 60 pola ekspresi reguler yang umum digunakan, dikelompokkan berdasarkan kategori. Setiap pola mencakup deskripsi, ekspresi itu sendiri, dan contoh kecocokan. Klik pola untuk menyalinnya, atau gunakan panel uji cepat untuk memvalidasi teks terhadapnya langsung di halaman ini.

Semuanya berjalan di browser Anda · tidak ada pola atau teks uji yang dikirim ke mana pun. Gunakan pola-pola ini di JavaScript, Python, PHP, Java, Go, atau bahasa apa pun yang mendukung ekspresi reguler. Untuk pengujian yang lebih lanjut dengan flag dan grup capture, coba Regex Penguji & Debugger kami.

Cara kerjanya

  1. Telusuri atau cari: telusuri pola berdasarkan kategori (validasi, ekstraksi, pemformatan) atau cari berdasarkan nama atau kasus penggunaan.
  2. Pratinjau pola: setiap entri menampilkan regex, deskripsi apa yang ditangkap, contoh input dengan kecocokan, dan batasan.
  3. Uji dengan data Anda: masukkan string uji Anda sendiri untuk memverifikasi bahwa pola menangkap apa yang Anda harapkan.
  4. Salin untuk digunakan: salin pola regex dalam format JavaScript, Python, atau POSIX untuk kode Anda.

Mengapa menggunakan pustaka regex?

Menulis ekspresi reguler dari awal memakan waktu dan rentan kesalahan. Pola yang sering dibutuhkan untuk memvalidasi email, mencocokkan URL, mengekstrak nomor telepon, mendeteksi kartu kredit, mengurai tanggal, atau memvalidasi alamat IP memiliki solusi yang sudah terbukti, tetapi menemukan versi yang andal memerlukan pencarian di Stack Overflow, mengevaluasi kebenarannya, dan memverifikasi kasus tepinya. Pustaka ini mengumpulkan pola yang diverifikasi dengan kasus tepi yang didokumentasikan, batasan yang diketahui, dan kasus uji konkret. Lebih cepat daripada menulis sendiri dan lebih andal daripada menyalin-tempel dari sumber Internet acak tanpa pengujian.

Kategori pola

Dari mana ekspresi reguler berasal

Ide matematis tentang «himpunan reguler» diformalkan oleh Stephen Cole Kleene pada tahun 1951 dalam memorandum penelitian RAND Representation of Events in Nerve Nets and Finite Automata. Operator * pada halaman ini masih disebut bintang Kleene untuk menghormatinya. Ken Thompson mengubah teori menjadi algoritma dalam makalah Juni 1968 di Communications of the ACM, Programming Techniques: Regular Expression Search Algorithm, dan mengirimkan implementasi regex pertama di editor QED di Bell Labs. Pada tahun 1973, mesin yang sama menggerakkan ed, kemudian grep (perluasan literal adalah «globally search for regular expression and print»), sed, dan awk. Perl (1987) dari Larry Wall dan terutama Perl 5 (1994) menambahkan grup bernama, lookaround, kuantifier tidak serakah dan penanganan Unicode yang menjadi dialek de facto yang dikenal sebagai PCRE, diporting ke C sebagai library oleh Philip Hazel pada tahun 1997.

Varian mesin dan apa yang berubah di antara mereka

Pola yang berjalan dengan rapi di JavaScript dapat gagal secara diam-diam di Go dan ditolak sepenuhnya di POSIX. Lima varian yang paling mungkin ditemui pengembang:

Backtracking katastrofik dan ReDoS

Sebagian besar mesin regex dalam bahasa-bahasa utama (PCRE, Java, JS V8 / SpiderMonkey / JavaScriptCore, Python re, .NET) adalah mesin backtracking. Ketika pola dengan kuantifier bersarang seperti (a+)+ menemui input yang hampir cocok, mesin dapat mencoba sejumlah eksponensial jalur alternatif sebelum menyerah. Inilah backtracking katastrofik, dan menjadi dasar kelas serangan ReDoS (Regular expression Denial of Service) yang dikatalogkan oleh OWASP.

Stack Overflow, 20 Juli 2016: sebuah pola yang dirancang untuk memotong spasi awal dan akhir, diterapkan pada badan pertanyaan yang berisi 20 000 karakter spasi berurutan, menghabiskan 11 menit CPU per permintaan dan membuat situs tidak responsif selama 34 menit. Post-mortem di blog resmi Stack Status merekomendasikan untuk mengganti regex pemotongan dengan trim string native.

Cloudflare, 2 Juli 2019: aturan WAF yang mengandung pola kuantifier bersarang .*(?:.*=.*) diterapkan secara global dan mengkonsumsi 100% CPU di setiap server edge selama 27 menit, membuat sebagian besar internet publik offline. Post-mortem Cloudflare di blog mereka memberikan kredit kepada peralihan ke crate regex Rust (mesin berbasis RE2, waktu linier) karena mencegah perulangan.

Pelajaran defensif: hindari kuantifier bersarang ((a+)+, (a*)*, (a|aa)+); hindari pemotongan gaya \s+$ pada input yang dikendalikan penyerang; pilih grup atomik (?>...) atau kuantifier posesif a++ di PCRE; dan untuk layanan throughput tinggi, pertimbangkan mesin berbasis RE2.

Email, URL, telepon, tanggal, kartu kredit: kapan tidak menggunakan regex

Email. Tata bahasa lengkap dari RFC 5322 (Oktober 2008) terkompilasi menjadi regex sekitar 3 000 karakter. Spesifikasi HTML5 W3C untuk validasi <input type="email"> menggunakan regex yang jauh lebih pendek «apakah-ini-tampak-seperti-email» yang merupakan titik awal yang tepat untuk petunjuk sisi klien. RFC 6531 (Februari 2012) mengizinkan alamat non-ASCII seperti 用户@example.com, yang akan ditolak secara keliru oleh regex hanya ASCII. Konsensus industri sejak RFC 6532: jangan validasi email dengan regex, kirim email verifikasi sebagai gantinya.

URL. RFC 3986 (Januari 2005) adalah spec sintaks URI generik, tetapi WHATWG URL Living Standard sengaja menyimpang darinya untuk mencocokkan apa yang sebenarnya diterima browser. Gunakan new URL("...") di JavaScript atau urllib.parse di Python alih-alih regex untuk apa pun yang melampaui pemeriksaan visual cepat.

Nomor telepon. Rekomendasi ITU-T E.164 (revisi saat ini November 2010) mengizinkan hingga 15 digit dengan awalan + opsional, tetapi aturan spesifik negara sangat bervariasi. Library open-source Google libphonenumber mengkodekan aturan per negara untuk setiap wilayah dan merupakan satu-satunya validator lintas-negara yang dapat diandalkan.

Tanggal. Regex seperti ^\d{4}-\d{2}-\d{2}$ cocok dengan format kalender ISO 8601-1:2019, tetapi juga menerima 2026-02-31. Validitas tanggal memerlukan logika kalender, bukan pencocokan pola; gunakan Date.parse() atau library tanggal.

Kartu kredit. Regex dapat mencocokkan panjang digit dan awalan IIN (Visa dimulai dengan 4, Mastercard dengan 51-55 atau 2221-2720, Amex dengan 34 atau 37) tetapi tidak dapat memverifikasi checksum Luhn (Hans Peter Luhn, IBM, Paten AS 2 950 048 diberikan Agustus 1960). Luhn memerlukan penjumlahan digit demi digit modulo 10.

Cara umum pengembang menggunakan library ini

Kesalahan umum

Pertanyaan yang lebih sering diajukan

Mengapa beberapa pola menggunakan (?:...) alih-alih (...)?

(?:...) adalah grup non-capturing: ia mengelompokkan untuk pengulangan atau alternasi tetapi tidak mengalokasikan slot backreference. Ini lebih cepat dan menghindari mencemari $1, $2 dalam array hasil. Gunakan (...) ketika Anda perlu mengekstrak teks yang ditangkap; gunakan (?:...) hanya untuk pengelompokan.

Apa flag regex yang paling umum?

i tidak peka huruf besar/kecil, g global (temukan semua, perilaku khusus JS), m multiline (sehingga ^ dan $ cocok dengan batas baris), s dotAll (sehingga . cocok dengan baris baru, ES2018+), u Unicode (ES2015+), y sticky (ES2015+), d hasIndices (ES2022+), v kelas notasi himpunan (ES2024+). Gabungkan sebagai /pattern/gimsu.

Bagaimana cara mencocokkan karakter khusus literal?

Lepaskan dengan backslash. Metakarakter regex yang perlu di-escape untuk pencocokan literal adalah: . ^ $ * + ? ( ) [ ] { } | \ /. Di dalam kelas karakter [...] himpunan karakter khusus lebih kecil: hanya ] \ ^ - perlu di-escape, tergantung posisi.

Bisakah saya menggunakan pola library ini di skrip shell?

Ya, dengan peringatan. grep menggunakan POSIX BRE secara default; grep -E menggunakan ERE; grep -P menggunakan PCRE di sistem di mana libpcre tertaut (GNU grep, macOS grep dengan Homebrew). Pola yang menggunakan lookaround, grup bernama, atau escape Unicode memerlukan grep -P atau ripgrep (yang menggunakan mesin RE2-based Rust dan menolak lookaround).

Apakah pola-pola ini dikirim ke server?

Tidak. Setiap regex di halaman ini, setiap pencarian yang Anda ketik, dan setiap string yang Anda uji di panel uji cepat diproses di mesin JavaScript browser Anda. Tidak ada panggilan jaringan yang dilakukan. Data pola itu sendiri dikirim sebagai file JSON statis di bundle halaman. Buka tab Jaringan di DevTools untuk memverifikasi.

Alat terkait