首頁 後端開發 php教程 讓人心動的PHP的正規表示式基礎(圖例詳解)

讓人心動的PHP的正規表示式基礎(圖例詳解)

Oct 18, 2021 pm 02:26 PM
php 正規表示式

在之前的文章中為大家帶來了《學會使用PHP的List、each函數及配合》,主要講解了應該如何使用list函數和each函數以及兩者之間應該怎樣配合使用,相信大家已經掌握的差不多了,那麼本篇文章我們一起來看看PHP中的正規表示式。希望對大家有幫助!

讓人心動的PHP的正規表示式基礎(圖例詳解)

正規表示式是一種邏輯公式,是用一開始宣告好的一些字元還有這些字元的組合,組成的一個“規定字串”,這個規定字串其實就是用來過濾字串的,可以理解為我們在登陸用戶的時候有時會要填寫驗證碼或者電話之類的這些特定的數據,這時候就要用到正則表達式。

正規表示式雖然看起來複雜,其實並不難,那接下來我們一起來看看吧。

正規表示式的定界符

#首先我們要學習的就是正規表示式的定界符,顧名思義,定界符就是確定正規表示式邊界的符號,定一個邊界,邊界以內就是正規表示式。同時正規表示式的定界符有規定:

  • 定界符,不能使用a-zA-Z0-9\ 除此之外都可以使用。並且必須成對出現,有開始就有結束。

範例如下:

$正则表达式$
%正则表达式%
/正则表达式/
登入後複製

其中我們需要注意的是/是轉義字符,當我們正則中需要匹配/的時候,可以使用\轉義一下。如果覺得麻煩的話,可以直接使用其他的定界符例如:

$/$
登入後複製

正規表示式的原子

正規表示式的原子是正規表示式裡的最小單位,也就是我們需要配對的內容,在我們成立的整形額表達式中,最少也要有一個原子。

其實可以理解為,所有可見的不可見的字元都是原子,像是空格、回車、換行、0-9、標點符號、A-Za-z、中文這些都是原子。

preg_match() 函數

在詳細的講原子之前,我們要先了解一個函數,那就是preg_match

#PHP 中的preg_match() 函數可以根據定義的正規表示式對字串進行搜尋以及匹配。

語法格式如下:

preg_match ( string $正则 , string $字符串 [, array &$结果] )
登入後複製

根據$正則也就是我們定義的正規表示式,在匹配$字串,如果存在則傳回符合個數,然後把符合的結果放在$結果裡。如果沒有符合到結果那就回傳0。

我們透過範例來看一下:

<?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;;
}
?>
登入後複製

輸出結果:

讓人心動的PHP的正規表示式基礎(圖例詳解)

由上述範例可以看出,我們定義了變數a,希望能夠匹配的是a,正好在$b中存在a,透過if else語句輸出成功了。

再來一個範例:

<?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;;
}
?>
登入後複製

輸出結果:

讓人心動的PHP的正規表示式基礎(圖例詳解)

#在上述範例中,希望符合到字串,但是$ b中不存在,所以沒有匹配成功,透過if else語句輸出為匹配成功。

知道了preg_match() 函數的基本用法之後我們可以和特殊標識的原子結合起來使用。

特殊標識的原子

  • \d---符合一個0-9    

  • #\D---除了0-9以外的所有字元   

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

  • \W---除了0-9A-Za-z_以外的所有字元   

  • #\s---符合所有空白字元\n \t \r 空格   

  • #\S---符合所有非空白字符   

  • [ ]---指定範圍的原子   

它們的具體用法給大家一個例子就明白了:

<?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;;
}
?>
登入後複製

輸出結果:

讓人心動的PHP的正規表示式基礎(圖例詳解)

在上述範例中,特殊標識的原子\d表示的就是0- 9的數字,那麼在需要匹配的$b中存在一個4,所以匹配成功。

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

輸出結果:

讓人心動的PHP的正規表示式基礎(圖例詳解)

在上述實例中,特殊標識的原子\w表示的是a-zA-Z0-9_ ,在變數b中沒有對應的元素,所以輸出結果為未符合。

其中還有一個[^]字元表示不符合指定區間的字元。

範例如下:

<?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;;
}
?>
登入後複製

輸出結果:

讓人心動的PHP的正規表示式基礎(圖例詳解)

通过[^]字符匹配除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;;
}
?>
登入後複製

输出结果:

讓人心動的PHP的正規表示式基礎(圖例詳解)

通过元字符+的添加,匹配到了多次字符,\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;;
     }
 ?>
登入後複製

输出结果:

讓人心動的PHP的正規表示式基礎(圖例詳解)

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;;
     }
 ?>
登入後複製

输出结果:

讓人心動的PHP的正規表示式基礎(圖例詳解)

推荐学习:《PHP视频教程

以上是讓人心動的PHP的正規表示式基礎(圖例詳解)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
威爾R.E.P.O.有交叉遊戲嗎?
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

適用於 Ubuntu 和 Debian 的 PHP 8.4 安裝和升級指南 適用於 Ubuntu 和 Debian 的 PHP 8.4 安裝和升級指南 Dec 24, 2024 pm 04:42 PM

PHP 8.4 帶來了多項新功能、安全性改進和效能改進,同時棄用和刪除了大量功能。 本指南介紹如何在 Ubuntu、Debian 或其衍生版本上安裝 PHP 8.4 或升級到 PHP 8.4

如何設定 Visual Studio Code (VS Code) 進行 PHP 開發 如何設定 Visual Studio Code (VS Code) 進行 PHP 開發 Dec 20, 2024 am 11:31 AM

Visual Studio Code,也稱為 VS Code,是一個免費的原始碼編輯器 - 或整合開發環境 (IDE) - 可用於所有主要作業系統。 VS Code 擁有大量針對多種程式語言的擴展,可以輕鬆編寫

我後悔之前不知道的 7 個 PHP 函數 我後悔之前不知道的 7 個 PHP 函數 Nov 13, 2024 am 09:42 AM

如果您是經驗豐富的PHP 開發人員,您可能會感覺您已經在那裡並且已經完成了。操作

您如何在PHP中解析和處理HTML/XML? 您如何在PHP中解析和處理HTML/XML? Feb 07, 2025 am 11:57 AM

本教程演示瞭如何使用PHP有效地處理XML文檔。 XML(可擴展的標記語言)是一種用於人類可讀性和機器解析的多功能文本標記語言。它通常用於數據存儲

在PHP API中說明JSON Web令牌(JWT)及其用例。 在PHP API中說明JSON Web令牌(JWT)及其用例。 Apr 05, 2025 am 12:04 AM

JWT是一種基於JSON的開放標準,用於在各方之間安全地傳輸信息,主要用於身份驗證和信息交換。 1.JWT由Header、Payload和Signature三部分組成。 2.JWT的工作原理包括生成JWT、驗證JWT和解析Payload三個步驟。 3.在PHP中使用JWT進行身份驗證時,可以生成和驗證JWT,並在高級用法中包含用戶角色和權限信息。 4.常見錯誤包括簽名驗證失敗、令牌過期和Payload過大,調試技巧包括使用調試工具和日誌記錄。 5.性能優化和最佳實踐包括使用合適的簽名算法、合理設置有效期、

php程序在字符串中計數元音 php程序在字符串中計數元音 Feb 07, 2025 pm 12:12 PM

字符串是由字符組成的序列,包括字母、數字和符號。本教程將學習如何使用不同的方法在PHP中計算給定字符串中元音的數量。英語中的元音是a、e、i、o、u,它們可以是大寫或小寫。 什麼是元音? 元音是代表特定語音的字母字符。英語中共有五個元音,包括大寫和小寫: a, e, i, o, u 示例 1 輸入:字符串 = "Tutorialspoint" 輸出:6 解釋 字符串 "Tutorialspoint" 中的元音是 u、o、i、a、o、i。總共有 6 個元

解釋PHP中的晚期靜態綁定(靜態::)。 解釋PHP中的晚期靜態綁定(靜態::)。 Apr 03, 2025 am 12:04 AM

靜態綁定(static::)在PHP中實現晚期靜態綁定(LSB),允許在靜態上下文中引用調用類而非定義類。 1)解析過程在運行時進行,2)在繼承關係中向上查找調用類,3)可能帶來性能開銷。

什麼是PHP魔術方法(__ -construct,__destruct,__call,__get,__ set等)並提供用例? 什麼是PHP魔術方法(__ -construct,__destruct,__call,__get,__ set等)並提供用例? Apr 03, 2025 am 12:03 AM

PHP的魔法方法有哪些? PHP的魔法方法包括:1.\_\_construct,用於初始化對象;2.\_\_destruct,用於清理資源;3.\_\_call,處理不存在的方法調用;4.\_\_get,實現動態屬性訪問;5.\_\_set,實現動態屬性設置。這些方法在特定情況下自動調用,提升代碼的靈活性和效率。

See all articles