Takeaways Key
Ekspresi biasa sering digunakan untuk melakukan carian, menggantikan substrings dan mengesahkan data rentetan. Artikel ini menyediakan petua, helah, sumber dan langkah untuk melalui ungkapan biasa yang rumit.
Jika anda tidak mempunyai skillet asas di bawah tali pinggang anda, anda boleh belajar Regex dengan panduan pemula kami. Sebagai arcane sebagai ungkapan biasa, ia tidak akan mengambil masa yang lama untuk mempelajari konsep -konsep tersebut.
Terdapat banyak buku, artikel, laman web yang menerangkan ungkapan biasa, jadi bukannya menulis penjelasan lain yang saya lebih suka pergi terus ke contoh yang lebih praktikal:
Anda boleh mencari lembaran cheat berguna di pautan ini. Bersama dengan pelbagai sumber yang berguna, terdapat juga video persidangan oleh Lea Verou di bahagian bawah jawatan ini - agak lama, tetapi ia sangat baik dalam memecahkan regex.
bagaimana membina regex yang baik
Ekspresi biasa sering digunakan dalam rutin harian pemaju - analisis log, membentuk pengesahan penyerahan, mencari dan menggantikan, dan sebagainya. Itulah sebabnya setiap pemaju yang baik harus tahu cara menggunakannya, tetapi apakah amalan terbaik untuk membina regex yang baik?
1. Tentukan senario
Menggunakan bahasa semulajadi untuk menentukan masalah ini akan memberi anda idea yang lebih baik tentang pendekatan untuk digunakan. Kata -kata boleh dan mesti, digunakan dalam definisi, berguna untuk menggambarkan kekangan atau dakwaan mandatori.
Berikut adalah contoh:
2. Membangunkan pelan
Setelah mempunyai definisi yang baik tentang masalah ini, kita dapat memahami jenis elemen yang terlibat dalam ekspresi biasa kita:
3. Melaksanakan/menguji/refactor
Sangat penting untuk mempunyai persekitaran ujian masa nyata untuk menguji dan meningkatkan ekspresi biasa anda. Terdapat laman web seperti regex101.com, regexr.com dan debuggex.com yang menyediakan beberapa persekitaran terbaik.
Untuk meningkatkan kecekapan regex, anda boleh cuba menjawab beberapa soalan tambahan ini:
Contoh praktikal
Matlamat contoh -contoh berikut bukan untuk menulis ungkapan yang hanya akan menyelesaikan masalah, tetapi untuk menulis ungkapan yang paling berkesan untuk kes -kes penggunaan tertentu, menggunakan unsur -unsur penting seperti rentang aksara, pernyataan, syarat, kumpulan dan sebagainya.
memadankan kata laluan
Senario:
^ menegaskan kedudukan pada permulaan rentetan
.* Memadankan mana -mana watak (kecuali Newline) antara sifar dan masa tanpa had
.* Memadankan mana -mana watak (kecuali Newline) antara sifar dan masa tanpa had
.* Memadankan mana -mana watak (kecuali Newline) antara sifar dan masa tanpa had
URL yang sepadan
Senario:
Corak:
^(http | https | ftp): [/] {2} ([a-z0-9-.]. [a-za-z] {2,4}) (: [0-9])? /? ([A-Za-Z0-9 -._?, '/\ & amp;%$#= ~]*)
Senario pertama cukup mudah untuk diselesaikan dengan ^(http | https | ftp): [/] {2}.
Untuk memadankan nama domain yang kita perlu ingat bahawa sah itu hanya boleh mengandungi huruf, digit, tanda hubung dan titik. Dalam contoh saya, saya mengehadkan bilangan aksara selepas tanda baca dari 2 hingga 4, tetapi boleh dilanjutkan untuk domain baru seperti .rocks atau .codes. Nama domain dipadankan dengan ([a-z0-9-.]. [A-za-z] {2,4}).
Spesifikasi port pilihan dipadankan dengan mudah (: [0-9])?.
URL boleh mengandungi pelbagai slash dan pelbagai aksara yang diulangi berkali-kali (lihat RFC3986), ini dipadankan dengan menggunakan pelbagai aksara dalam kumpulan ([a-z0-9 -._?, '/\ & Amp;%$ #= ~]*).
Ia benar -benar berguna untuk memadankan setiap elemen penting dengan penangkapan kumpulan (), kerana ia akan mengembalikan hanya perlawanan yang kita perlukan. Ingat bahawa watak -watak tertentu perlu dilepaskan.
Di bawah, setiap subpattern tunggal dijelaskan:
memadankan tag html
Senario:
Corak:
(.*?) 1>
Memadankan tag permulaan dan kandungan di dalamnya cukup mudah dengan Dan (.*?), Tetapi dalam corak di atas saya telah menambah sesuatu yang berguna: rujukan kepada kumpulan penangkapan.
Setiap kumpulan penangkapan yang ditakrifkan oleh kurungan () boleh dirujuk menggunakan nombor kedudukannya, (pertama) (kedua) (ketiga), yang akan membolehkan operasi selanjutnya.
Ungkapan di atas dapat dijelaskan sebagai:
Termasuk hanya dua kumpulan penangkapan dalam ungkapan, nama tag dan kandungan, akan mengembalikan perlawanan yang sangat jelas, senarai nama tag dengan kandungan yang berkaitan.
Mari menggali sedikit lebih mendalam dan terangkan subpatterns:
sepadan dengan kata -kata duplikat
Senario:
Corak:
b (w) b (? =.*1)
Ekspresi biasa ini seolah -olah mencabar tetapi menggunakan beberapa konsep yang ditunjukkan sebelumnya.
Corak memperkenalkan konsep sempadan perkataan.
Batasan perkataan B terutamanya memeriksa kedudukan. Ia sepadan apabila watak perkataan (i.e.: Abcde) diikuti oleh watak bukan perkataan (iaitu: -~,!).
Di bawah ini anda dapat mencari beberapa contoh penggunaan sempadan perkataan untuk menjadikannya lebih jelas:
- Memandangkan ungkapan ungkapan biasa adalah hebat
- perlawanan corak bareb adalah
- Corak W {3} B dapat sepadan dengan tiga huruf terakhir kata -kata: lar, ion, adalah, ome
Ungkapan di atas dapat dijelaskan sebagai:
Di bawah ini anda akan mendapat penjelasan untuk setiap corak sub:
Ekspresi akan lebih masuk akal jika kita mengembalikan semua perlawanan dan bukan hanya kembali yang pertama. Lihat fungsi PHP preg_match_all untuk maklumat lanjut.
Pemikiran Akhir
Ekspresi biasa adalah pedang bermata dua. Lebih banyak kerumitan ditambah, semakin sukar untuk menyelesaikan masalah ini. Itulah sebabnya, kadang -kadang, sukar untuk mencari ungkapan biasa yang akan sepadan dengan semua kes, dan lebih baik menggunakan beberapa regex yang lebih kecil.
Mempunyai senario masalah yang baik boleh sangat membantu, dan akan membolehkan anda mula memikirkan pelbagai watak, kekangan, dakwaan, pengulangan, nilai pilihan, dan lain -lain. Memberi perhatian lebih kepada penangkapan kumpulan akan menjadikan perlawanan berguna untuk pemprosesan selanjutnya. Jangan ragu untuk memperbaiki ungkapan dalam contoh, dan beritahu kami bagaimana anda melakukannya!
Sumber Berguna
Di bawah ini anda dapat mencari maklumat dan sumber lebih lanjut untuk membantu kemahiran regex anda berkembang.
Jangan ragu untuk menambah komen kepada artikel jika anda mendapati sesuatu yang berguna yang tidak disenaraikan.
lea verou - /reg (exp) {2}Lained/: Demystifying Expressions Regular
https://www.youtube.com/watch?v=eklues9rvak
perpustakaan php
Nama
Keterangan
RegexpBuilder
Mewujudkan regex menggunakan kaedah rantaian manusia yang boleh dibaca
Noonoofluentregex
Membina ungkapan regex menggunakan penetapan fasih dan istilah bahasa Inggeris seperti di atas
Hoaregex
Menyediakan alat untuk menganalisis regex dan menjana rentetan
Regex terbalik
Diberi ungkapan biasa akan menghasilkan rentetan
laman web
url
Keterangan
regex101.com
PCRE Online Regex Tester
regextester.com
PCRE Online Regex Tester
rexv.org
PCRE Online Regex Tester
debuggex.com
Menyokong PCRE dan menyediakan debugger visual yang sangat berguna
regexper.com
Javascript style regex, tetapi berguna untuk debug
phpliveregex.com
Penguji dalam talian untuk fungsi preg
regxlib.com
Pangkalan data ekspresi biasa yang sedia untuk digunakan
Regular-Erpressions.info
Tutorial Regex, Kajian Buku, Contoh
buku
Tajuk
Keterangan
Pengarang
editor
Menguasai ungkapan biasa
Mesti mempunyai buku regex
Jeffrey Friedl
O'Reilly
Rujukan Pocket Ekspresi Biasa
Ungkapan biasa untuk Perl, Ruby, PHP, Python, C, Java dan .NET
Tony Stubblebine
O'Reilly
Soalan Lazim (Soalan Lazim) Mengenai Ekspresi Biasa (Regex)
Apakah beberapa aplikasi praktikal ekspresi biasa (regex)? Mereka biasanya digunakan dalam pengesahan data untuk memastikan input pengguna sepadan dengan format tertentu, seperti alamat e -mel atau nombor telefon. Mereka juga boleh digunakan dalam mengikis web untuk mengekstrak kepingan maklumat tertentu dari laman web. Di samping itu, Regex boleh digunakan dalam pemprosesan teks untuk tugas -tugas seperti mencari dan menggantikan rentetan teks tertentu, memisahkan rentetan ke dalam pelbagai substrings, dan banyak lagi. ?
Mewujudkan ungkapan biasa yang kompleks melibatkan pemahaman dan menggabungkan pelbagai komponen regex. Ini termasuk literal, kelas watak, kuantifi, dan metacharacters. Dengan menggabungkan komponen ini dengan cara yang berbeza, anda boleh membuat ungkapan biasa yang sepadan dengan pelbagai corak. Sebagai contoh, anda boleh membuat ungkapan biasa yang sepadan dengan alamat e -mel, nombor telefon, atau URL.
Walaupun ungkapan biasa sangat kuat, mereka tidak selalu menjadi alat terbaik untuk pekerjaan itu. Bergantung pada tugas di tangan, anda mungkin lebih baik menggunakan pendekatan yang berbeza. Sebagai contoh, untuk tugas manipulasi rentetan mudah, anda mungkin dapat menggunakan kaedah rentetan terbina dalam dan bukannya ungkapan biasa. Untuk menghidupkan HTML atau XML, anda biasanya akan menggunakan parser khusus. Dan untuk tugas pemprosesan teks yang kompleks, anda mungkin ingin mempertimbangkan menggunakan perpustakaan pemprosesan bahasa semulajadi.
Atas ialah kandungan terperinci Demystifying regex dengan contoh praktikal. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!