Asas ungkapan biasa yang menarik dalam PHP (penjelasan terperinci dengan ilustrasi)

WBOY
Lepaskan: 2023-04-10 17:48:02
asal
2304 orang telah melayarinya

Dalam artikel sebelumnya, saya membawakan anda "Belajar menggunakan Senarai PHP, setiap fungsi dan kerjasama", yang menerangkan terutamanya cara menggunakan fungsi senarai dan setiap fungsi dan apa yang perlu dilakukan antara kedua-dua . Apabila digunakan bersama, saya percaya anda telah hampir menguasainya, jadi dalam artikel ini kita akan melihat ungkapan biasa dalam PHP. Semoga ia membantu semua orang!

Asas ungkapan biasa yang menarik dalam PHP (penjelasan terperinci dengan ilustrasi)

Ungkapan biasa ialah formula logik, iaitu "rentetan yang ditetapkan" yang terdiri daripada beberapa aksara yang diisytiharkan pada permulaan dan gabungan aksara ini sebenarnya digunakan untuk menapis rentetan. Dapat difahami bahawa apabila log masuk sebagai pengguna, kadangkala kita perlu mengisi data tertentu seperti kod pengesahan atau nombor telefon Pada masa ini, ungkapan biasa digunakan.

Walaupun ungkapan biasa kelihatan rumit, ia sebenarnya tidak sukar. Mari kita lihat seterusnya.

Pembatas ungkapan biasa

Perkara pertama yang perlu kita pelajari ialah pembatas ungkapan biasa seperti namanya , Pembatas ialah simbol yang menentukan sempadan ungkapan biasa Tetapkan sempadan dan ungkapan biasa berada dalam sempadan. Pada masa yang sama, pembatas ungkapan biasa ditetapkan:

  • pembatas, a-zA-Z0-9 tidak boleh digunakan dan semua yang lain boleh digunakan. Dan mereka mesti muncul secara berpasangan, dengan permulaan dan penghujung.

Contohnya seperti berikut:

$正则表达式$
%正则表达式%
/正则表达式/
Salin selepas log masuk

Apa yang perlu kita perhatikan ialah / ialah watak melarikan diri, yang boleh digunakan apabila kita memerlukan untuk memadankan / dalam ungkapan biasa Escape it. Jika anda mendapati ia menyusahkan, anda boleh terus menggunakan pembatas lain seperti:

$/$
Salin selepas log masuk

Atom ungkapan biasa

Atom ungkapan biasa ialah Yang terkecil unit dalam ungkapan biasa, yang perlu kita padankan, mesti mempunyai sekurang-kurangnya satu atom dalam ungkapan integer yang kita wujudkan.

Malah, boleh difahami bahawa semua aksara yang boleh dilihat dan tidak kelihatan adalah atom, seperti ruang, pemulangan kereta, suapan baris, 0-9, tanda baca, A-Za-z dan Cina semua atom.

fungsi preg_match()

Sebelum bercakap tentang atom secara terperinci, kita perlu memahami sesuatu fungsi dahulu, iaitu preg_match

PHP The fungsi preg_match() boleh mencari dan memadankan rentetan berdasarkan ungkapan biasa yang ditentukan.

Format sintaks adalah seperti berikut:

preg_match ( string $正则 , string $字符串 [, array &$结果] )
Salin selepas log masuk

Menurut $regex, iaitu ungkapan biasa yang kami takrifkan, apabila memadankan $string, jika wujud, bilangan padanan akan dikembalikan, dan kemudian hasil yang sepadan Masukkan dalam $results. Jika tiada keputusan ditemui, 0 dikembalikan.

Mari kita lihat melalui contoh:

<?php
//定义一个变量叫a,作为我们定义的正则表达式。
$a = &#39;/a/&#39;;
$b = &#39;abbcccddddeeeee&#39;;
if(preg_match($a, $b, $c)){
   echo &#39;匹配到了,结果为:&#39;;
   var_dump($c);
}else{
   echo &#39;没有匹配到&#39;;
}
?>
Salin selepas log masuk

Hasil keluaran:

Asas ungkapan biasa yang menarik dalam PHP (penjelasan terperinci dengan ilustrasi)

Daripada contoh di atas anda boleh Ia boleh dilihat bahawa kami telah mentakrifkan pembolehubah a, dengan harapan untuk memadankan a, dan a wujud dalam $b, dan output melalui pernyataan if else berjaya.

Contoh lain:

<?php
//定义一个变量叫a,作为我们定义的正则表达式。
$a = &#39;/fff/&#39;;
$b = &#39;abbcccddddeeeee&#39;;
if(preg_match($a, $b, $c)){
   echo &#39;匹配到了,结果为:&#39;;
   var_dump($c);
}else{
   echo &#39;没有匹配到&#39;;
}
?>
Salin selepas log masuk

Hasil keluaran:

Asas ungkapan biasa yang menarik dalam PHP (penjelasan terperinci dengan ilustrasi)

Dalam contoh di atas, kami berharap untuk memadankan rentetan , Tetapi $b tidak wujud, jadi tiada padanan yang berjaya Pernyataan if else menunjukkan bahawa perlawanan itu berjaya.

Setelah mengetahui penggunaan asas fungsi preg_match(), kita boleh menggunakannya dalam kombinasi dengan atom yang dikenal pasti khas.

Atom yang dikenal pasti khas

  • d---padan dengan 0-9

  • D---Semua aksara kecuali 0-9

  • w---a-zA-Z0-9_

  • W---Semua aksara kecuali 0-9A-Za-z_

  • s---Padankan semua aksara ruang kosong n ruang

  • S---padan semua aksara bukan ruang putih

  • [ ]---atom dalam julat yang ditentukan

Penggunaan khusus mereka akan difahami dengan memberi anda contoh:

<?php
$a = &#39;/\d/&#39;;
$b = &#39;人生自古谁无4&#39;;
if(preg_match($a, $b, $c)){
   echo &#39;匹配到了,结果为:&#39;;
   var_dump($c);
}else{
   echo &#39;没有匹配到&#39;;
}
?>
Salin selepas log masuk

Hasil keluaran:

Asas ungkapan biasa yang menarik dalam PHP (penjelasan terperinci dengan ilustrasi)

Dalam contoh di atas , yang dikenal pasti khas atom d mewakili nombor dari 0 hingga 9, jadi terdapat 4 dalam $b yang perlu dipadankan, supaya perlawanan itu berjaya.

<?php
$a = &#39;/\w/&#39;;
$b = &#39;人生自古谁无死&#39;;
if(preg_match($a, $b, $c)){
   echo &#39;匹配到了,结果为:&#39;;
   var_dump($c);
}else{
   echo &#39;没有匹配到&#39;;
}
?>
Salin selepas log masuk

Hasil keluaran:

Asas ungkapan biasa yang menarik dalam PHP (penjelasan terperinci dengan ilustrasi)

Dalam contoh di atas, atom w yang dikenal pasti khas mewakili a-zA-Z0-9_ , terdapat tiada unsur sepadan dalam pembolehubah b, jadi hasil keluaran tidak dipadankan.

Terdapat juga [^] aksara yang menunjukkan aksara yang tidak sepadan dengan selang waktu yang ditentukan.

Contoh adalah seperti berikut:

<?php
$a = &#39;/[^0-9A-Za-z_]/&#39;;
$b = &#39;abbccc122333&#39;;
if(preg_match($a, $b, $c)){
   echo &#39;匹配到了,结果为:&#39;;
   var_dump($c);
}else{
   echo &#39;没有匹配到&#39;;
}
?>
Salin selepas log masuk

Hasil keluaran:

Asas ungkapan biasa yang menarik dalam PHP (penjelasan terperinci dengan ilustrasi)

通过[^]字符匹配除0-9A-Za-z_以外的字符,未匹配到。

总结一下:

  • \w---[a-zA-Z0-9_]

  • \W---[^a-zA-Z0-9_]

  • \d---[0-9]

  • \D---[^0-9]

  • \s---[ \t\n\f\r]

  • \S---[^ \t\n\f\r]

正则表达式的元字符

在上面的示例中,我们能够看出通过匹配的话,只能匹配一个字符,但是在我们的日常使用中,通常会匹配多个字符,那这时候只通过我们的原子就不能达到我们的目的。就需要通过元字符来帮我们修饰原子,实现更多的功能。

  • *---代表匹配前面的一个原子,匹配0次或者任意多次前面的字符。

  • +---匹配一次或多次前面的一个字符

  • ?---前面的字符可有可无【可选】 有或没有

  • .---更标准一些应该把点算作原子。匹配除了\n以外的所有字符 或者。注:它的优先级最低了。

  • ^---必须要以抑扬符之后的字符串开始

  • $--- 必须要以$之前的字符结尾

  • \b---词边界

  • \B---非边界

  • {m}---有且只能出现m次

  • {n,m}---可以出现n到m次

  • {m,}---至少m次,最大次数不限制

  • ()---改变优先级或者将某个字符串视为一个整体,匹配到的数据取出来也可以使用它

接下来我们通过一些例子来实例看一下这些元字符的使用:

<?php
$a = &#39;/\d+/&#39;;
$b = "爱你10000年";
if(preg_match($a, $b, $c)){
   echo &#39;匹配到了,结果为:&#39;;
   var_dump($c);
}else{
   echo &#39;没有匹配到&#39;;
}
?>
Salin selepas log masuk

输出结果:

Asas ungkapan biasa yang menarik dalam PHP (penjelasan terperinci dengan ilustrasi)

通过元字符+的添加,匹配到了多次字符,\d+中d是匹配数字,+则表示最少匹配一次前面的字符。

正则表达式的模式修正符

通过原子和元字符的了解,我们已经完成了正则表达式的入门,但是这仍然不能代表正则表达式的真正实力,如果我们只希望正则表达式匹配一部分应该怎么办?有些特殊情况依然需要处理,这时候我们就要用到正则表达式的模式修正符。

下面列举一些常用的模式修正符:

  • i 模式中的字符将同时匹配大小写字母.

  • m 字符串视为多行

  • s 将字符串视为单行,换行符作为普通字符.

  • x 将模式中的空白忽略.

  • A 强制仅从目标字符串的开头开始匹配.

  • D 模式中的美元元字符仅匹配目标字符串的结尾.

  • U 匹配最近的字符串.

它的用法如下:

/正则表达式/模式修正符

接下来我们通过一些实例来看一下它的使用:

<?php  
    $a = &#39;/ABC/i&#39;; 
$b = &#39;8988abc12313&#39;;
$c = &#39;11111ABC2222&#39;; 
if(preg_match($a, $b, $d)){
     echo &#39;匹配到了,结果为:&#39;; 
    var_dump($d); }else{
     echo &#39;没有匹配到&#39;;
     }
 ?>
Salin selepas log masuk

输出结果:

Asas ungkapan biasa yang menarik dalam PHP (penjelasan terperinci dengan ilustrasi)

i可以让匹配的时候同时匹配大小写,那么接下来把匹配的$b换成$c试一下,我们看一下输出结果:

<?php  
    $a = &#39;/ABC/i&#39;; 
$b = &#39;8988abc12313&#39;;
$c = &#39;11111ABC2222&#39;; 
if(preg_match($a, $c, $d)){
     echo &#39;匹配到了,结果为:&#39;; 
    var_dump($d); }else{
     echo &#39;没有匹配到&#39;;
     }
 ?>
Salin selepas log masuk

输出结果:

Asas ungkapan biasa yang menarik dalam PHP (penjelasan terperinci dengan ilustrasi)

推荐学习:《PHP视频教程

Atas ialah kandungan terperinci Asas ungkapan biasa yang menarik dalam PHP (penjelasan terperinci dengan ilustrasi). Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:php.cn
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan