Demystifying regex dengan contoh praktikal
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.
Apakah beberapa kesilapan biasa untuk dielakkan apabila menggunakan ungkapan biasa (regex)? *), yang boleh menyebabkan hasil yang tidak dijangka. Satu lagi kesilapan biasa tidak dapat melepaskan watak khas apabila mereka dimaksudkan untuk ditafsirkan secara literal. Di samping itu, penting untuk diingat bahawa ungkapan biasa adalah sensitif kes secara lalai, jadi anda perlu menggunakan bendera yang sesuai jika anda ingin mengabaikan kes. >
Terdapat beberapa alat dalam talian yang tersedia yang membolehkan anda menguji ekspresi biasa anda. Alat ini biasanya membolehkan anda memasukkan ungkapan biasa dan rentetan ujian, dan kemudian mereka menyerlahkan bahagian -bahagian rentetan ujian yang sepadan dengan ungkapan biasa. Ini boleh menjadi cara terbaik untuk menyahpepijat ekspresi biasa anda dan memastikan mereka bekerja seperti yang diharapkan. ungkapan dalam beberapa bentuk. Walau bagaimanapun, sintaks khusus dan ciri yang disokong boleh berbeza -beza antara bahasa. Sebagai contoh, JavaScript, Python, dan Ruby semua menyokong ungkapan biasa, tetapi masing -masing mempunyai sintaks dan ciri unik mereka sendiri. Walaupun ungkapan biasa boleh menjadi sangat kuat, mereka juga boleh menjadi sumber yang berintensifkan jika tidak digunakan dengan betul. Ekspresi biasa kompleks boleh mengambil masa yang lama untuk melaksanakan, terutamanya pada rentetan teks yang besar. Oleh itu, penting untuk menggunakan ungkapan biasa dengan bijak dan mengoptimumkannya sebanyak mungkin. Ini termasuk mengelakkan kuantum yang tidak perlu, menggunakan kumpulan yang tidak menangkap apabila anda tidak memerlukan teks yang dipadankan, dan menggunakan kelas aksara dan bukannya penggantian jika mungkin. Di samping itu, beberapa enjin ekspresi biasa menawarkan ciri pengoptimuman, seperti kuantum malas, yang dapat meningkatkan prestasi. Tersedia untuk mempelajari lebih lanjut mengenai ungkapan biasa. Ini termasuk tutorial dalam talian, buku, dan platform pembelajaran interaktif. Di samping itu, banyak bahasa pengaturcaraan mempunyai dokumentasi yang luas mengenai sintaks dan ciri -ciri ekspresi biasa mereka. Untuk menghuraikan HTML atau XML, ia biasanya tidak disyorkan. Ini kerana HTML dan XML mempunyai struktur bersarang yang sukar untuk ditangkap dengan tepat dengan ungkapan biasa. Sebaliknya, biasanya lebih baik menggunakan parser HTML atau XML yang berdedikasi.Apakah beberapa alternatif untuk ekspresi biasa (regex)?
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!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

Video Face Swap
Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas











Dalam php, kata laluan_hash dan kata laluan 1) password_hash menjana hash yang mengandungi nilai garam untuk meningkatkan keselamatan. 2) Kata Laluan_verify Sahkan kata laluan dan pastikan keselamatan dengan membandingkan nilai hash. 3) MD5 dan SHA1 terdedah dan kekurangan nilai garam, dan tidak sesuai untuk keselamatan kata laluan moden.

PHP dan Python masing -masing mempunyai kelebihan mereka sendiri, dan memilih mengikut keperluan projek. 1.PHP sesuai untuk pembangunan web, terutamanya untuk pembangunan pesat dan penyelenggaraan laman web. 2. Python sesuai untuk sains data, pembelajaran mesin dan kecerdasan buatan, dengan sintaks ringkas dan sesuai untuk pemula.

PHP digunakan secara meluas dalam e-dagang, sistem pengurusan kandungan dan pembangunan API. 1) e-dagang: Digunakan untuk fungsi keranjang belanja dan pemprosesan pembayaran. 2) Sistem Pengurusan Kandungan: Digunakan untuk penjanaan kandungan dinamik dan pengurusan pengguna. 3) Pembangunan API: Digunakan untuk Pembangunan API RESTful dan Keselamatan API. Melalui pengoptimuman prestasi dan amalan terbaik, kecekapan dan pemeliharaan aplikasi PHP bertambah baik.

Jenis PHP meminta untuk meningkatkan kualiti kod dan kebolehbacaan. 1) Petua Jenis Skalar: Oleh kerana Php7.0, jenis data asas dibenarkan untuk ditentukan dalam parameter fungsi, seperti INT, Float, dan lain -lain. 2) Return Type Prompt: Pastikan konsistensi jenis nilai pulangan fungsi. 3) Jenis Kesatuan Prompt: Oleh kerana Php8.0, pelbagai jenis dibenarkan untuk ditentukan dalam parameter fungsi atau nilai pulangan. 4) Prompt jenis yang boleh dibatalkan: membolehkan untuk memasukkan nilai null dan mengendalikan fungsi yang boleh mengembalikan nilai null.

PHP masih dinamik dan masih menduduki kedudukan penting dalam bidang pengaturcaraan moden. 1) kesederhanaan PHP dan sokongan komuniti yang kuat menjadikannya digunakan secara meluas dalam pembangunan web; 2) fleksibiliti dan kestabilannya menjadikannya cemerlang dalam mengendalikan borang web, operasi pangkalan data dan pemprosesan fail; 3) PHP sentiasa berkembang dan mengoptimumkan, sesuai untuk pemula dan pemaju yang berpengalaman.

PHP terutamanya pengaturcaraan prosedur, tetapi juga menyokong pengaturcaraan berorientasikan objek (OOP); Python menyokong pelbagai paradigma, termasuk pengaturcaraan OOP, fungsional dan prosedur. PHP sesuai untuk pembangunan web, dan Python sesuai untuk pelbagai aplikasi seperti analisis data dan pembelajaran mesin.

PHP dan Python mempunyai kelebihan dan kekurangan mereka sendiri, dan pilihannya bergantung kepada keperluan projek dan keutamaan peribadi. 1.PHP sesuai untuk pembangunan pesat dan penyelenggaraan aplikasi web berskala besar. 2. Python menguasai bidang sains data dan pembelajaran mesin.

Menggunakan penyataan preprocessing dan PDO dalam PHP secara berkesan dapat mencegah serangan suntikan SQL. 1) Gunakan PDO untuk menyambung ke pangkalan data dan tetapkan mod ralat. 2) Buat kenyataan pra -proses melalui kaedah menyediakan dan lulus data menggunakan ruang letak dan laksanakan kaedah. 3) Hasil pertanyaan proses dan pastikan keselamatan dan prestasi kod.
