Apakah itu Regex (Regular Expression)?

Pendek untuk ungkapan biasa, regex adalah rentetan teks yang membolehkan anda membuat pola yang membantu memadankan, mencari, dan mengurus teks. Perl adalah contoh hebat dari bahasa pengaturcaraan yang menggunakan ungkapan biasa. Walau bagaimanapun, satu-satunya tempat yang boleh anda dapati ungkapan biasa. Ungkapan biasa juga boleh digunakan dari baris perintah dan dalam editor teks untuk mencari teks dalam fail.

Apabila pertama kali cuba memahami ekspresi reguler, seolah-olah ia adalah bahasa yang berbeza. Walau bagaimanapun, menguasai ungkapan biasa boleh menjimatkan ribuan jam jika anda bekerja dengan teks atau perlu mengurai sejumlah besar data. Berikut adalah contoh ungkapan biasa dengan setiap komponennya berlabel. Ungkapan biasa ini juga ditunjukkan dalam contoh-contoh pengaturcaraan Perl yang ditunjukkan di kemudian halaman ini.

Asas ungkapan teratur (lembaran cheat)

Melihat contoh di atas mungkin sangat menggembirakan. Walau bagaimanapun, sebaik sahaja anda memahami sintaks dasar tentang bagaimana arahan ungkapan biasa beroperasi, anda boleh membaca contoh di atas seolah-olah anda membaca ayat ini. Malangnya, tidak semua program, arahan, dan bahasa pengaturcaraan menggunakan ungkapan biasa yang sama, tetapi mereka semua berkongsi persamaan.

WatakApa yang dilakukannya?ContohPerlawanan
^Memadankan permulaan garis^ abcabc, abcdef .., abc123
$Perlawanan akhir barisabc $saya: abc, 123abc, theabc
.Padan mana-mana watakacabc, asg, a2c
|ATAU pengendaliabc | xyzabc atau xyz
(...)Tangkap apa-apa yang sepadan(a) b (c)Menangkap 'a' dan 'c'
(?: ...)Kumpulan tidak menangkap(a) b (?: c)Menangkap 'a' tetapi hanya kumpulan 'c'
[...]Memadankan apa-apa yang terkandung dalam kurungan[abc]a, b, atau c
[^ ...]Memadankan apa-apa yang tidak terkandung dalam kurungan[^ abc]xyz, 123, 1de
[az]Memadankan sebarang aksara antara 'a' dan 'z'[bz]bc, fikiran, xyz
{x}Jumlah 'x' yang tepat untuk dipadankan(abc) {2}abcabc
{x, }Padam 'x' jumlah kali atau lebih(abc) {2, }abcabc, abcabcabc
{x, y}Padankan antara masa 'x' dan 'y'.(a) {2, 4}aa, aaa, aaaaa
*Perlawanan tamak yang sepadan dengan segala-galanya di tempat *ab * cabc, abbcc, abcdc
+Memadankan watak sebelum + satu atau lebih kalia + cac, aac, aaac,
?Memadankan watak sebelum? sifar atau satu kali. Juga, digunakan sebagai perlawanan yang tidak tamakab? cac, abc
\Melarikan diri dari karakter selepas backslash atau membuat urutan melarikan diri.a \ scac

Melarikan diri aksara (urutan melarikan diri)

Nota: melarikan diri aksara adalah sensitif huruf.

WatakApa yang dilakukannya?
\Mana-mana watak yang tidak disebutkan di bawah didahului dengan \ akan terlepas. Sebagai contoh, \. sepadan dengan tempoh dan tidak melaksanakan fungsi yang disebutkan di atas. Watak-watak yang perlu dilarikan adalah () [] {} ^ $. | * +? \
\ 0Null aksara
\ aSesuaikan loceng atau penggera.
\ bBatasan kata dalam kebanyakan atau ruang belakang
\ BSempadan bukan perkataan
\ dPadankan sebarang angka perpuluhan (0-9)
\ DPadankan sebarang angka
\ ePadankan pelarian
\ fPadan suapan borang
\ nPadan baris baru
\ Q ... \ EAbaikan sebarang makna khas dalam apa yang dipadankan.
\ rPadankan kembali kereta
\ sMemadankan watak ruang (ruang, \ t, \ r, \ n)
\ SMemadankan sebarang watak ruang bukan putih
\ tPadankan tab
\ vPadankan tab menegak
\ wMemadankan mana-mana satu aksara kata [a-zA-Z_0-9]
\ WMemadankan mana-mana satu aksara bukan perkataan

Bendera ungkapan biasa

Di luar ungkapan biasa (pada akhir) bendera boleh digunakan untuk membantu dengan padanan corak.

WatakApa yang dilakukannya?
iAbaikan kes itu (kes atas dan bawah dibenarkan)
mPerlawanan pelbagai baris
sPadan baris baru
xBenarkan ruang dan komen
JNama kumpulan pendua dibenarkan
UPerlawanan Ungreedy

Contoh bahasa pengaturcaraan Perl yang biasa

Berikut adalah beberapa contoh ungkapan biasa dan padanan corak dalam Perl. Banyak contoh-contoh ini sama atau sama dengan bahasa pengaturcaraan dan program lain yang menyokong ungkapan biasa.

 $ data = ~ s / data buruk / data yang baik / i; 

Contoh di atas menggantikan apa-apa "data buruk" dengan "data yang baik" menggunakan perlawanan kesensitifan kes. Jadi jika pemboleh ubah data $ "Ini adalah data buruk" ia akan menjadi "Berikut adalah data yang baik".

 $ data = ~ s / a / A /; 

Contoh ini menggantikan mana-mana huruf kecil dengan huruf besar A. Jadi jika $ data adalah "contoh" ia akan menjadi "exAmple".

 $ data = ~ s / [az] / * /; 

Contoh di atas menggantikan sebarang huruf kecil, melalui z, dengan asterisk. Jadi jika $ data adalah "Contoh" ia akan menjadi "E ******".

 $ data = ~ s / e $ / es /; 

Contoh ini menggunakan watak $, yang memberitahu ungkapan biasa untuk memadankan teks sebelum ia di hujung rentetan. Jadi jika $ data adalah "contoh" ia akan menjadi "contoh".

 $ data = ~ s /\./!/; 

Dalam contoh di atas, kita menggantikan tempoh dengan tanda seru. Kerana tempoh itu adalah meta-karakter jika anda hanya memasuki tempoh tanpa \ (melarikan diri) ia diperlakukan sebagai sebarang aksara. Dalam contoh ini, jika $ data adalah "contoh." ia akan menjadi "contoh!", bagaimanapun, jika anda tidak melarikan diri, ia akan menggantikan setiap watak dan menjadi "!!!!!!!!"

 $ data = ~ s / ^ e / E /; 

Akhirnya, dalam contoh di atas, karet (^) memberitahu ungkapan biasa untuk memadankan apa-apa pada permulaan garisan. Dalam contoh ini, ini akan sepadan dengan mana-mana huruf kecil pada permulaan garisan dan menggantikannya dengan modal E. Oleh itu, jika $ data adalah "contoh" ia akan menjadi "Contoh".

Petua: Jika anda ingin meneroka ungkapan biasa lebih banyak dalam perintah seperti grep, atau ungkapan biasa dalam bahasa pengaturcaraan, lihat buku O'Reilly "Menguasai ungkapan biasa."

Akronim komputer, urutan melarikan diri, Ungkapan, Glob, Meta-aksara, Pengaturcaraan, Tilde, Wildcard