- English
- German
- Español
- Français
- Português do Brasil
- 中文版
- 日本語
- 한국어
- Turkish
- Greek
- Magyar
- Polish
- Русский
- Tiếng Việt
- Bahasa Indonesia
- فارسی
- עברית
Ekspresi reguler adalah sekelompok karakter atau simbol yang digunakan untuk menemukan pola tertentu dalam sebuah teks.
Ekspresi reguler adalah pola yang dicocokkan dengan string subjek dari kiri ke kanan. Ekspresi reguler digunakan untuk mengganti teks dalam string, memvalidasi formulir, mengekstrak substring dari string berdasarkan kecocokan pola, dan masih banyak lagi. Istilah "ekspresi reguler" adalah suap, jadi kamu biasanya akan temukan istilah yang disingkat "regex" atau "regexp".
Bayangkan Anda sedang menulis aplikasi dan Anda ingin menetapkan aturan kapan a pengguna memilih nama pengguna mereka. Kami ingin mengizinkan nama pengguna berisi huruf, angka, garis bawah, dan tanda hubung. Kami juga ingin membatasi jumlah karakter di username agar tidak terlihat jelek. Kita dapat menggunakan ekspresi reguler berikut untuk memvalidasi nama pengguna:
Ekspresi reguler di atas dapat menerima string john_doe, jo-hn_doe dan
john12_as. Itu tidak cocok dengan Jo karena string itu berisi huruf besar
surat dan juga terlalu pendek.
Ekspresi reguler hanyalah pola karakter yang kita gunakan untuk melakukan
pencarian dalam sebuah teks. Misalnya, ekspresi reguler the berarti: huruf
t, diikuti huruf h, diikuti huruf e.
"the" => The fat cat sat on the mat.
Ekspresi reguler 123 cocok dengan string 123. Ekspresi reguler adalah
dicocokkan dengan string input dengan membandingkan setiap karakter di reguler
ekspresi ke setiap karakter dalam string input, satu demi satu. Reguler
ekspresi biasanya peka huruf besar/kecil sehingga ekspresi reguler The akan
tidak cocok dengan string the.
"The" => The fat cat sat on the mat.
Karakter meta adalah blok bangunan ekspresi reguler. Meta karakter tidak berdiri sendiri tetapi sebaliknya ditafsirkan dalam beberapa cara spesial. Beberapa karakter meta memiliki arti khusus dan tertulis di dalamnya tanda kurung siku. Karakter metanya adalah sebagai berikut:
| Meta karakter | Deskripsi |
|---|---|
| . | Titik cocok dengan karakter tunggal apa pun kecuali jeda baris. |
| [ ] | Kelas karakter. Mencocokkan karakter apa pun yang ada di antara tanda kurung siku. |
| [^ ] | Kelas karakter yang dinegasikan. Cocok dengan karakter apa pun yang tidak ada di antara tanda kurung siku |
| * | Mencocokkan dengan 0 atau lebih pengulangan dari simbol sebelumnya. |
| + | Mencocokkan 1 atau lebih pengulangan dari simbol sebelumnya. |
| ? | Jadikan simbol sebelumnya opsional. |
| {n,m} | Kurung Kurawal. Mencocokkan setidaknya "n" tetapi tidak lebih dari "m" pengulangan simbol sebelumnya. |
| (xyz) | Kelompok karakter. Mencocokkan karakter xyz dalam urutan yang tepat. |
| | | Alternasi. Mencocokkan dengan karakter sebelum atau karakter setelah simbol. |
| \ | Meloloskan dari karakter berikutnya. Ini memungkinkan Anda untuk mencocokkan karakter yang dipesan [ ] ( ) { } . * + ? ^ $ \ | |
| ^ | Mencocokkan dengan awal input. |
| $ | Mencocokkan dengan akhir input. |
Tanda titik . adalah contoh paling sederhana dari karakter meta. Karakter meta .
cocok dengan karakter tunggal apa pun. Itu tidak akan cocok dengan karakter kembali atau baris baru.
Misalnya, ekspresi reguler .ar berarti: karakter apa pun, diikuti oleh
huruf a, diikuti dengan huruf r.
".ar" => The car parked in the garage.
Kumpulan karakter juga disebut kelas karakter. Tanda kurung siku digunakan untuk
menentukan set karakter. Gunakan tanda hubung di dalam set karakter untuk menentukan
jangkauan karakter. Urutan rentang karakter di dalam tanda kurung siku
tidak masalah. Misalnya, ekspresi reguler [Tt]he berarti: huruf besar
T atau huruf kecil t, diikuti huruf h, diikuti huruf e.
"[Tt]he" => The car parked in the garage.
Sebuah periode di dalam set karakter, bagaimanapun, berarti periode literal. yang biasa
ekspresi ar[.] berarti: karakter huruf kecil a, diikuti dengan huruf r,
diikuti dengan karakter titik ..
"ar[.]" => A garage is a good place to park a car.
Secara umum, simbol tanda sisipan mewakili awal string, tetapi ketika itu
diketik setelah kurung siku pembuka itu meniadakan set karakter. Untuk
contoh, ekspresi reguler [^c]ar berarti: karakter apa pun kecuali c,
diikuti dengan karakter a, diikuti dengan huruf r.
"[^c]ar" => The car parked in the garage.
Karakter meta +, * atau ? digunakan untuk menentukan berapa kali a
subpola dapat terjadi. Karakter meta ini bertindak secara berbeda di berbagai
situasi.
Simbol * cocok dengan nol atau lebih pengulangan dari pencocokan sebelumnya. Itu
ekspresi reguler a* berarti: nol atau lebih pengulangan dari huruf kecil sebelumnya
karakter a. Tetapi jika itu muncul setelah set karakter atau kelas maka ia menemukan
pengulangan seluruh set karakter. Misalnya, ekspresi reguler
[a-z]* artinya: sejumlah huruf kecil dalam satu baris.
"[a-z]*" => The car parked in the garage #21.
Simbol * dapat digunakan dengan karakter meta . untuk mencocokkan string apa pun dari
karakter .*. Simbol * dapat digunakan dengan karakter spasi putih \s
untuk mencocokkan string karakter spasi. Misalnya, ungkapan
\s*cat\s* artinya: nol spasi atau lebih, diikuti dengan huruf kecil c,
diikuti dengan huruf kecil a, diikuti dengan huruf kecil t,
diikuti oleh nol atau lebih spasi.
"\s*cat\s*" => The fat cat sat on the concatenation.
Simbol + cocok dengan satu atau lebih pengulangan karakter sebelumnya. Untuk
contoh, ekspresi reguler c.+t berarti: huruf kecil c, diikuti oleh
setidaknya satu karakter, diikuti dengan huruf kecil t. Itu perlu
mengklarifikasi bahwa t adalah t terakhir dalam kalimat.
"c.+t" => The fat cat sat on the mat.
Dalam ekspresi reguler, karakter meta ? membuat karakter sebelumnya
opsional. Simbol ini cocok dengan nol atau satu contoh karakter sebelumnya.
Misalnya, ekspresi reguler [T]?he artinya: Huruf besar opsional
T, diikuti dengan huruf kecil h, diikuti dengan huruf kecil e.
"[T]he" => The car is parked in the garage.
"[T]?he" => The car is parked in the garage.
Dalam ekspresi reguler, kurung kurawal (juga disebut quantifier) digunakan untuk
tentukan berapa kali karakter atau sekelompok karakter dapat
ulang. Misalnya, ekspresi reguler [0-9]{2,3} berarti: Setidaknya cocok
2 digit, tetapi tidak lebih dari 3, mulai dari 0 hingga 9.
"[0-9]{2,3}" => The number was 9.9997 but we rounded it off to 10.0.
Kita bisa meninggalkan nomor kedua. Misalnya, ekspresi reguler
[0-9]{2,} berarti: Mencocokkan 2 digit atau lebih. Jika kita juga menghapus koma,
ekspresi reguler [0-9]{3} berarti: Sama persis dengan 3 digit.
"[0-9]{2,}" => The number was 9.9997 but we rounded it off to 10.0.
"[0-9]{3}" => The number was 9.9997 but we rounded it off to 10.0.
Grup penangkap adalah grup subpola yang ditulis di dalam tanda kurung
(...). Seperti yang dibahas sebelumnya, dalam ekspresi reguler, jika kita menempatkan quantifier
setelah karakter maka akan mengulangi karakter sebelumnya. Tetapi jika kita menempatkan quantifier
setelah grup penangkap kemudian mengulangi seluruh grup penangkap. Sebagai contoh,
ekspresi reguler (ab)* cocok dengan nol atau lebih pengulangan karakter
"ab". Kita juga dapat menggunakan karakter meta | bergantian di dalam grup penangkap.
Misalnya, ekspresi reguler (c|g|p)ar berarti: huruf kecil c,
g atau p, diikuti oleh a, diikuti oleh r.
"(c|g|p)ar" => The car is parked in the garage.
Perhatikan bahwa menangkap grup tidak hanya cocok, tetapi juga menangkap, karakter untuk digunakan dalam bahasa induk. Bahasa induk bisa berupa Python atau JavaScript atau hampir semua bahasa yang mengimplementasikan ekspresi reguler dalam definisi fungsi.
Grup yang tidak menangkap adalah grup yang cocok dengan karakter tetapi
tidak menangkap kelompok. Grup yang tidak menangkap dilambangkan dengan ? diikuti oleh :
dalam tanda kurung (...). Misalnya, ekspresi reguler (?:c|g|p)ar mirip dengan
(c|g|p)ar karena cocok dengan karakter yang sama tetapi tidak akan membuat grup tangkapan.
"(?:c|g|p)ar" => The car is parked in the garage.
Grup yang tidak menangkap dapat berguna saat digunakan dalam fungsi temukan-dan-ganti atau ketika dicampur dengan grup penangkap untuk menjaga gambaran umum saat memproduksi jenis keluaran lainnya. Lihat juga 4. Melihat-lihat.
Dalam ekspresi reguler, bilah vertikal | digunakan untuk mendefinisikan pergantian.
Pergantian seperti pernyataan OR antara beberapa ekspresi. Sekarang, Anda mungkin
berpikir bahwa set karakter dan pergantian bekerja dengan cara yang sama. Tapi yang besar
perbedaan antara set karakter dan pergantian adalah bahwa set karakter bekerja di
tingkat karakter tetapi pergantian bekerja pada tingkat ekspresi. Misalnya,
ekspresi reguler (T|t)he|car berarti: baik (huruf besar T atau huruf kecil
t, diikuti dengan huruf kecil h, diikuti dengan huruf kecil e) ATAU
(huruf kecil c, diikuti dengan huruf kecil a, diikuti oleh
huruf kecil r). Perhatikan bahwa saya menyertakan tanda kurung untuk kejelasan, untuk menunjukkan bahwa salah satu ekspresi
dalam tanda kurung dapat dipenuhi dan itu akan cocok.
"(T|t)he|car" => The car is parked in the garage.
Garis miring terbalik \ digunakan dalam ekspresi reguler untuk keluar dari karakter berikutnya. Ini
memungkinkan kita untuk menyertakan karakter yang dicadangkan seperti { } [ ] / \ + * . $ ^ | ? sebagai karakter yang cocok. Untuk menggunakan salah satu karakter khusus ini sebagai karakter yang cocok, awali dengan \.
Misalnya, ekspresi reguler . digunakan untuk mencocokkan karakter apa pun kecuali a
garis baru. Sekarang, untuk mencocokkan . dalam string input, ekspresi reguler
(f|c|m)at\.? artinya: huruf kecil f, c atau m, diikuti dengan huruf kecil
a, diikuti dengan huruf kecil t, diikuti dengan . . opsional
karakter.
"(f|c|m)at\.?" => The fat cat sat on the mat.
Dalam ekspresi reguler, kami menggunakan jangkar untuk memeriksa apakah simbol yang cocok adalah
simbol awal atau simbol akhir dari string input. Jangkar terdiri dari dua jenis:
Tipe pertama adalah tanda sisipan ^ yang memeriksa apakah karakter yang cocok adalah yang pertama
karakter input dan tipe kedua adalah tanda dolar $ yang memeriksa apakah cocok
karakter adalah karakter terakhir dari string input.
Simbol tanda sisipan ^ digunakan untuk memeriksa apakah karakter yang cocok adalah karakter pertama
dari string masukan. Jika kita menerapkan ekspresi reguler berikut ^a (artinya 'a' harus
karakter awal) ke string abc, itu akan cocok dengan a. Tapi jika kita melamar
ekspresi reguler ^b ke string di atas, itu tidak akan cocok dengan apa pun.
Karena dalam string abc, "b" bukanlah karakter awal. Mari lihat
di ekspresi reguler lain ^(T|t)he yang artinya: huruf besar T atau
huruf kecil t harus menjadi karakter pertama dalam string, diikuti oleh a
huruf kecil h, diikuti dengan huruf kecil e.
"(T|t)he" => The car is parked in the garage.
"^(T|t)he" => The car is parked in the garage.
Tanda dolar $ digunakan untuk memeriksa apakah karakter yang cocok adalah karakter terakhir
dalam tali. Misalnya, ekspresi reguler (at\.)$ berarti: a
huruf kecil a, diikuti dengan huruf kecil t, diikuti oleh .
karakter dan matcher harus berada di akhir string.
"(at\.)" => The fat cat. sat. on the mat.
"(at\.)$" => The fat cat. sat. on the mat.
Ada sejumlah singkatan yang mudah digunakan untuk set karakter yang umum digunakan/ ekspresi reguler:
| Singkatan | Deskripsi |
|---|---|
| . | Karakter apa pun kecuali baris baru |
| \w | Mencocokkan karakter alfanumerik: [a-zA-Z0-9_] |
| \W | Mencocokkan karakter non-alfanumerik: [^\w] |
| \d | Mencocokkan digit: [0-9] |
| \D | Mencocokkan non-digit: [^\d] |
| \s | Mencocokkan karakter spasi putih: [\t\n\f\r\p{Z}] |
| \S | Mencocokkan karakter non-spasi: [^\s] |
Melihat ke belakang dan melihat ke depan (juga disebut melihat sekeliling) adalah jenis tertentu dari
grup non-penangkapan (digunakan untuk mencocokkan pola tetapi tanpa menyertakannya dalam pencocokan
daftar). Lookarounds digunakan ketika sebuah pola harus
didahului atau diikuti oleh pola lain. Misalnya, bayangkan kita ingin mendapatkan semua
angka yang didahului oleh karakter $ dari string
$4,44 dan $10,88. Kami akan menggunakan ekspresi reguler berikut (?<=\$)[0-9\.]*
yang artinya: dapatkan semua angka yang mengandung karakter . dan didahului
oleh karakter $. Ini adalah lookaround yang biasa digunakan
ekspresi:
| Simbol | Deskripsi |
|---|---|
| ?= | Pandangan ke Depan Positif |
| ?! | Melihat ke Depan Negatif |
| ?<= | Tampilan Positif di Belakang |
| ?<! | Tampilan Negatif di Belakang |
Pandangan ke depan positif menegaskan bahwa bagian pertama dari ekspresi harus
diikuti oleh ekspresi lookahead. Pertandingan yang dikembalikan hanya berisi teks
yang dicocokkan dengan bagian pertama dari ekspresi. Untuk mendefinisikan positif
lookahead, tanda kurung digunakan. Di dalam tanda kurung itu, tanda tanya dengan
tanda sama dengan digunakan seperti ini: (?=...). Ekspresi lookahead ditulis setelah
tanda sama dengan di dalam kurung. Misalnya, ekspresi reguler
(T|t)he(?=\sfat) artinya: cocok dengan huruf kecil t atau huruf besar
T, diikuti huruf h, diikuti huruf e. Dalam tanda kurung kita
mendefinisikan lookahead positif yang memberitahu mesin ekspresi reguler untuk mencocokkan The
atau the hanya jika diikuti oleh kata fat.
"(T|t)he(?=\sfat)" => The fat cat sat on the mat.
Pandangan negatif ke depan digunakan ketika kita perlu mendapatkan semua kecocokan dari string input
yang tidak mengikuti pola tertentu. Sebuah lookahead negatif ditulis dengan cara yang sama seperti a
pandangan positif ke depan. Satu-satunya perbedaan adalah, alih-alih tanda sama dengan =, kami
gunakan tanda seru ! untuk menunjukkan negasi yaitu (?!...). Yuk simak berikut ini
ekspresi reguler (T|t)he(?!\sfat) yang artinya: dapatkan semua kata The atau the
dari string input yang tidak diikuti oleh karakter spasi dan kata fat.
"(T|t)he(?!\sfat)" => The fat cat sat on the mat.
Positif melihat ke belakang digunakan untuk mendapatkan semua kecocokan yang didahului oleh a
pola tertentu. Positif lookbehinds ditulis (?<=...). Misalnya,
ekspresi reguler (?<=(T|t)he\s)(fat|mat) artinya: dapatkan semua kata fat atau mat
dari string input yang datang setelah kata The atau the.
"(?<=(T|t)he\s)(fat|mat)" => The fat cat sat on the mat.
Pandangan belakang negatif digunakan untuk mendapatkan semua kecocokan yang tidak didahului oleh a
pola tertentu. Tampilan negatif di belakang ditulis (?<!...). Misalnya,
ekspresi reguler (?<!(T|t)he\s)(cat) artinya: dapatkan semua kata cat dari input
string yang tidak setelah kata The atau the.
"(?<!(T|t)he\s)(cat)" => The cat sat on cat.
Bendera juga disebut pengubah karena mereka memodifikasi output dari regular ekspresi. Bendera ini dapat digunakan dalam urutan atau kombinasi apa pun, dan merupakan bagian integral dari RegExp.
| Bendera | Deskripsi |
|---|---|
| i | Tidak peka huruf besar/kecil: Pencocokan tidak peka huruf besar/kecil. |
| g | Penelusuran Global: Cocokkan semua instance, bukan hanya yang pertama. |
| m | Multiline: Karakter meta jangkar bekerja di setiap baris. |
Pengubah i digunakan untuk melakukan pencocokan case-insensitive. Misalnya,
ekspresi reguler /The/gi berarti: huruf besar T, diikuti dengan huruf kecil
h, diikuti oleh e. Dan di akhir ekspresi reguler
flag i memberitahu mesin ekspresi reguler untuk mengabaikan kasus ini. Sebisa kamu
lihat, kami juga menyediakan flag g karena kami ingin mencari pola di
seluruh string masukan.
"The" => The fat cat sat on the mat.
"/The/gi" => The fat cat sat on the mat.
Pengubah g digunakan untuk melakukan kecocokan global (menemukan semua kecocokan daripada
berhenti setelah pertandingan pertama). Misalnya, ekspresi reguler/.(at)/g
berarti: karakter apa pun kecuali baris baru, diikuti dengan huruf kecil a,
diikuti dengan huruf kecil t. Karena kami menyediakan flag g di akhir
ekspresi reguler, sekarang akan menemukan semua kecocokan dalam string input, bukan hanya yang pertama (yang merupakan perilaku default).
"/.(at)/" => The fat cat sat on the mat.
"/.(at)/g" => The fat cat sat on the mat.
Pengubah m digunakan untuk melakukan pencocokan multi-baris. Seperti yang telah kita bahas sebelumnya,
jangkar (^, $) digunakan untuk memeriksa apakah suatu pola ada di awal input atau
tamat. Tetapi jika kita ingin jangkar bekerja pada setiap baris, kita menggunakan
bendera m. Misalnya, ekspresi reguler /at(.)?$/gm berarti: huruf kecil
a, diikuti dengan huruf kecil t dan, opsional, apa pun kecuali
baris baru. Dan karena flag m, mesin ekspresi reguler sekarang cocok dengan pola
di akhir setiap baris dalam sebuah string.
"/.at(.)?$/" => The fat
cat sat
on the mat.
"/.at(.)?$/gm" => The fat cat sat on the mat.
Secara default, regex akan melakukan kecocokan greedy, yang berarti kecocokan akan berlangsung selama
mungkin. Kita dapat menggunakan ? untuk mencocokkan dengan cara yang lazy, yang berarti pencocokan harus sesingkat mungkin.
"/(.*at)/" => The fat cat sat on the mat.
"/(.*?at)/" => The fat cat sat on the mat.
- Buka pull request dengan peningkatan
- Diskusikan ide dalam issue
- Sebarkan materinya
- Jangkau dengan umpan balik apa pun
MIT © Zeeshan Ahmad
