Rumah pembangunan bahagian belakang tutorial php 正则表达式之正则处理函数_PHP教程

正则表达式之正则处理函数_PHP教程

Jul 20, 2016 am 10:58 AM
fungsi Pangkalan berurusan dengan belajar kami biasa daripada ungkapan tatabahasa

前面我们已经学习了正则表达式的基础语法,包括了定界符、原子、元字符和模式修正 符。实际上正则表达式想要起作用的话,就必须借用正则表达式处理函数。本节我们就来介绍一下PHP中基于perl的正则表达式处理函数,主要包含了分割, 匹配,查找,替换等等处理操作,依旧是配合示例讲解,让我们开始吧。

和正则表达式一样,正则表达式处理函数不能够独立使用,而这必须相结合,才能够完成特定的功能。在前面我们也说过,基于perl的正则表达式要快于POXIS正则表达式处理函数,所以我们只介绍以preg开头的基于perl的正则表达式。注意:在能偶使用字符串函数处理的时候,就不要使用正则表达式来处理字符串,因为字符串处理函数更快。

下面我们来看一些常用的正则表达式处理函数。

1,preg_match()函数。

函数preg_match()执行一个正则表达式匹配,其定义如下:

<ol class="dp-c"><li class="alt"><span><span>int preg_match ( string </span><span class="vars">$pattern</span><span> , string </span><span class="vars">$subject</span><span> [, </span><span class="keyword">array</span><span> &</span><span class="vars">$matches</span><span> [, int </span><span class="vars">$flags</span><span> = 0 [, int </span><span class="vars">$offset</span><span> = 0 ]]] ) </span></span></li></ol>
Salin selepas log masuk

实际上就是搜索subject中匹配pattern的部分, 以保存在数组matches中.请看示例:

<ol class="dp-c">
<li class="alt"><span><span><?php     </span></span></span></li>
<li><span> </span></li>
<li class="alt">
<span>     </span><span class="vars">$pattern</span><span> = </span><span class="string">'/<b>.*?</b>/'</span><span>;    </span>
</li>
<li>
<span>     </span><span class="vars">$string</span><span> = </span><span class="string">'<b>welcome</b> <b>to</b> <b>phpfuns</b>dsadsadas'</span><span>;    </span>
</li>
<li class="alt">
<span>     </span><span class="keyword">if</span><span> (preg_match(</span><span class="vars">$pattern</span><span>, </span><span class="vars">$string</span><span>, </span><span class="vars">$arr</span><span>)) {    </span>
</li>
<li>
<span>         </span><span class="func">echo</span><span> </span><span class="string">"正则表达式<b>{$pattern}</b>和字符串<b>{$string}</b>匹配成功<br>"</span><span>;    </span>
</li>
<li class="alt">
<span>         print_r(</span><span class="vars">$arr</span><span>);    </span>
</li>
<li>
<span>     } </span><span class="keyword">else</span><span> {    </span>
</li>
<li class="alt">
<span>         </span><span class="func">echo</span><span> </span><span class="string">"<font>正则表达式{$pattern}和字符串{$string}匹配失败</font>"</span><span>;    </span>
</li>
<li><span>     }    </span></li>
<li class="alt"><span> ?>   </span></li>
<li><span> </span></li>
</ol>
Salin selepas log masuk
2,preg_match_all()函数。

函数preg_match_all()函数执行一个全局正则表达式匹配,其定义和preg_match()函数一致,只不过匹配了全部结果。请看示例:

<ol class="dp-c">
<li class="alt"><span><span><?php     </span></span></span></li>
<li>
<span>     </span><span class="vars">$pattern</span><span> = </span><span class="string">'/<b>.*?</b>/'</span><span>;    </span>
</li>
<li class="alt">
<span>     </span><span class="vars">$string</span><span> = </span><span class="string">'<b>welcome</b> <b>to</b> <b>phpfuns</b>dsadsadas'</span><span>;    </span>
</li>
<li>
<span>     </span><span class="keyword">if</span><span> (preg_match_all(</span><span class="vars">$pattern</span><span>, </span><span class="vars">$string</span><span>, </span><span class="vars">$arr</span><span>)) {    </span>
</li>
<li class="alt">
<span>         </span><span class="func">echo</span><span> </span><span class="string">"正则表达式<b>{$pattern}</b>和字符串<b>{$string}</b>匹配成功<br>"</span><span>;    </span>
</li>
<li>
<span>         print_r(</span><span class="vars">$arr</span><span>);    </span>
</li>
<li class="alt">
<span>     } </span><span class="keyword">else</span><span> {    </span>
</li>
<li>
<span>         </span><span class="func">echo</span><span> </span><span class="string">"<font>正则表达式{$pattern}和字符串{$string}匹配失败</font>"</span><span>;    </span>
</li>
<li class="alt"><span>     }    </span></li>
<li><span> ?>   </span></li>
<li class="alt"><span> </span></li>
</ol>
Salin selepas log masuk

依旧是上面的示例(只换了正则处理函数为preg_match_all()),但是匹配的结果数组内容不一样了。

3, preg_replace()函数

函数preg_replace()执行一个正则表达式替换,其定义如下:

mixed preg_replace ( mixed $pattern , mixed $replacement , mixed $subject [, int $limit = -1 [, int &$count ]] )

实际上就是搜索subject中匹配pattern的部分, 以replacement进行替换.其中limit指的是每个模式在每个subject上进行替换的最大次数. 默认是 -1(无限). 如果指定count,将会被填充为完成的替换次数.

注意:

A,如果subject是一个数组, preg_replace()返回一个数组, 其他情况下返回一个字符串.

B,如果匹配被查找到, 替换后的subject被返回, 其他情况下返回没有改变的subject. 如果发生错误, 返回NULL .

C,子模式可以应用到参数replacement中,使用方式为n或者${n}。(在正则表达式的模式中我们只能使用n的形式来获取已经匹配的子模式,切记!)

D,如果使用模式修正符e,则参数replacement中可以解析函数。(在其它的正则表达式处理函数中,模式修正符e均被忽略!)

请看下面的综合示例:

<ol class="dp-c">
<li class="alt"><span><span><?php     </span></span></span></li>
<li>
<span>    </span><span class="vars">$pattern</span><span> = </span><span class="string">'/(php)|(mysql)/e'</span><span>;    </span>
</li>
<li class="alt">
<span>    </span><span class="vars">$string</span><span> = </span><span class="string">'这个字符串中的php和mysql被替换成大写的了!'</span><span>;    </span>
</li>
<li>
<span>    </span><span class="vars">$result</span><span> = preg_replace(</span><span class="vars">$pattern</span><span>, </span><span class="string">'strtoupper("${1}2")'</span><span>, </span><span class="vars">$string</span><span>, -1, </span><span class="vars">$count</span><span>);    </span>
</li>
<li class="alt">
<span>    </span><span class="func">echo</span><span> </span><span class="vars">$result</span><span>.</span><span class="string">'<br>'</span><span>;    </span>
</li>
<li>
<span>    </span><span class="func">echo</span><span> </span><span class="vars">$count</span><span>;    </span>
</li>
<li class="alt"><span>?>   </span></li>
</ol>
Salin selepas log masuk

上例中,我们使用了模式修正符e,这样的话strtoupper()函数就可以当作字符串被解析,这就是模式修正符e的作用!而参数${1}和2分别是子模式1和子模式2。上例的作用就是将字符串$string中匹配到的子模式php和mysql替换成大写字母!

4,preg_split()函数。

preg_split执行一个正则表达式分隔字符串。其定义如下:

array preg_split ( string $pattern , string $subject [, int $limit = -1 [, int $flags = 0 ]] )

实际上就是将subject按照pattern分割,返回分割后的数组。其中,limit将限制分隔得到的子串最多只有limit个, 返回的最后一个子串将包含所有剩余部分.limit值为-1, 0或null时都代表"不限制"。

我们来看一个示例:

<ol class="dp-c">
<li class="alt"><span><span><?php     </span></span></span></li>
<li>
<span>     </span><span class="vars">$pattern</span><span> = </span><span class="string">'/<p>(.*?)</p>/'</span><span>;    </span>
</li>
<li class="alt">
<span>     </span><span class="vars">$string</span><span> = </span><span class="string">'这个字符串中的<p>php</p>和<p>mysql</p>被分割了!'</span><span>;    </span>
</li>
<li>
<span>     </span><span class="vars">$result</span><span> = preg_split(</span><span class="vars">$pattern</span><span>, </span><span class="vars">$string</span><span>, -1, PREG_SPLIT_DELIM_CAPTURE);    </span>
</li>
<li class="alt">
<span>     print_r(</span><span class="vars">$result</span><span>);    </span>
</li>
<li><span> ?>   </span></li>
<li class="alt"><span> </span></li>
</ol>
Salin selepas log masuk

上例中,我们使用了常量PREG_SPLIT_DELIM_CAPTURE设 置返回结果中包含子模式(如果设置为PREG_SPLIT_NO_EMPTY,preg_split()将进返回分隔后的非空部分。)我们如果把上例中正 则表达式的括号去掉,则结果中不再包含php和mysql这两个匹配成功的子模式。

常用的正则表达式处理函数我们就介绍完了,本节的例子可能会难一些,但希望大家还是认真的试验并体会一下,后面的正则表达式应用部分,我们会经常使用正则表达式处理函数。

原文地址:

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/445694.htmlTechArticle前面我们已经学习了正则表达式的基础语法,包括了定界符、原子、元字符和模式修正 符。实际上正则表达式想要起作用的话,就必须借用...
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
1 bulan yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
1 bulan yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Akan R.E.P.O. Ada Crossplay?
1 bulan yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Petua untuk mencipta fungsi baharu secara dinamik dalam fungsi golang Petua untuk mencipta fungsi baharu secara dinamik dalam fungsi golang Apr 25, 2024 pm 02:39 PM

Bahasa Go menyediakan dua teknologi penciptaan fungsi dinamik: penutupan dan refleksi. penutupan membenarkan akses kepada pembolehubah dalam skop penutupan, dan refleksi boleh mencipta fungsi baharu menggunakan fungsi FuncOf. Teknologi ini berguna dalam menyesuaikan penghala HTTP, melaksanakan sistem yang sangat boleh disesuaikan dan membina komponen boleh pasang.

Pertimbangan untuk susunan parameter dalam penamaan fungsi C++ Pertimbangan untuk susunan parameter dalam penamaan fungsi C++ Apr 24, 2024 pm 04:21 PM

Dalam penamaan fungsi C++, adalah penting untuk mempertimbangkan susunan parameter untuk meningkatkan kebolehbacaan, mengurangkan ralat dan memudahkan pemfaktoran semula. Konvensyen susunan parameter biasa termasuk: tindakan-objek, objek-tindakan, makna semantik dan pematuhan perpustakaan standard. Susunan optimum bergantung pada tujuan fungsi, jenis parameter, kemungkinan kekeliruan dan konvensyen bahasa.

Bagaimana untuk menulis fungsi yang cekap dan boleh diselenggara di Jawa? Bagaimana untuk menulis fungsi yang cekap dan boleh diselenggara di Jawa? Apr 24, 2024 am 11:33 AM

Kunci untuk menulis fungsi Java yang cekap dan boleh diselenggara ialah: pastikan ia mudah. Gunakan penamaan yang bermakna. Mengendalikan situasi khas. Gunakan keterlihatan yang sesuai.

Koleksi lengkap formula fungsi excel Koleksi lengkap formula fungsi excel May 07, 2024 pm 12:04 PM

1. Fungsi SUM digunakan untuk menjumlahkan nombor dalam lajur atau sekumpulan sel, contohnya: =SUM(A1:J10). 2. Fungsi AVERAGE digunakan untuk mengira purata nombor dalam lajur atau sekumpulan sel, contohnya: =AVERAGE(A1:A10). 3. Fungsi COUNT, digunakan untuk mengira bilangan nombor atau teks dalam lajur atau sekumpulan sel, contohnya: =COUNT(A1:A10) 4. Fungsi IF, digunakan untuk membuat pertimbangan logik berdasarkan syarat yang ditentukan dan mengembalikan hasil yang sepadan.

Bagaimana untuk memadankan berbilang perkataan atau rentetan menggunakan ungkapan biasa Golang? Bagaimana untuk memadankan berbilang perkataan atau rentetan menggunakan ungkapan biasa Golang? May 31, 2024 am 10:32 AM

Ungkapan biasa Golang menggunakan aksara paip | untuk memadankan berbilang perkataan atau rentetan, memisahkan setiap pilihan sebagai ungkapan OR logik. Contohnya: padanan "musang" atau "anjing": musang|padanan anjing "cepat", "coklat" atau "malas": (cepat|coklat|malas) sepadan dengan "Pergi", "Python" atau "Java": Pergi| Python |Java memadankan perkataan atau kod zip 4 digit: ([a-zA

Perbandingan kelebihan dan kekurangan parameter lalai fungsi C++ dan parameter pembolehubah Perbandingan kelebihan dan kekurangan parameter lalai fungsi C++ dan parameter pembolehubah Apr 21, 2024 am 10:21 AM

Kelebihan parameter lalai dalam fungsi C++ termasuk memudahkan panggilan, meningkatkan kebolehbacaan dan mengelakkan ralat. Kelemahannya ialah fleksibiliti terhad dan sekatan penamaan. Kelebihan parameter variadic termasuk fleksibiliti tanpa had dan pengikatan dinamik. Kelemahan termasuk kerumitan yang lebih besar, penukaran jenis tersirat dan kesukaran dalam penyahpepijatan.

Apakah faedah fungsi C++ mengembalikan jenis rujukan? Apakah faedah fungsi C++ mengembalikan jenis rujukan? Apr 20, 2024 pm 09:12 PM

Faedah fungsi mengembalikan jenis rujukan dalam C++ termasuk: Peningkatan prestasi: Melewati rujukan mengelakkan penyalinan objek, sekali gus menjimatkan memori dan masa. Pengubahsuaian langsung: Pemanggil boleh mengubah suai secara langsung objek rujukan yang dikembalikan tanpa menugaskannya semula. Kesederhanaan kod: Lulus melalui rujukan memudahkan kod dan tidak memerlukan operasi penugasan tambahan.

Apakah perbezaan antara fungsi PHP tersuai dan fungsi yang telah ditetapkan? Apakah perbezaan antara fungsi PHP tersuai dan fungsi yang telah ditetapkan? Apr 22, 2024 pm 02:21 PM

Perbezaan antara fungsi PHP tersuai dan fungsi yang dipratentukan ialah: Skop: Fungsi tersuai terhad kepada skop definisinya, manakala fungsi yang dipratentukan boleh diakses di seluruh skrip. Cara mentakrifkan: Fungsi tersuai ditakrifkan menggunakan kata kunci fungsi, manakala fungsi yang dipratakrifkan ditakrifkan oleh kernel PHP. Lulus parameter: Fungsi tersuai menerima parameter, manakala fungsi yang dipratentukan mungkin tidak memerlukan parameter. Kebolehlanjutan: Fungsi tersuai boleh dibuat mengikut keperluan, manakala fungsi yang dipratentukan terbina dalam dan tidak boleh diubah suai.

See all articles