首頁 後端開發 php教程 php正規表示式

php正規表示式

Aug 08, 2016 am 09:20 AM
echo match str

什麼叫正規表示式

正規表示式是對字串進行操作的一種邏輯公式,就是用一些特定的字元組合成一個規則字串,稱之為正規匹配模式。

$p = '/apple/'; $str = "apple banna"; if (preg_match($p, $str)) { echo 'matched'; }

其中字串'/apple/'就是一個正規表示式,他用來匹配來源字串中是否存在apple字串。

PHP中使用PCRE函式庫函數進行正規匹配,例如上例中的preg_match用於執行一個正規匹配,常用來判斷一類字元模式是否存在。

正規表示式的基本語法

PCRE函式庫函數中,正規匹配模式使用分隔符號與元字元組成,分隔符號可以是非數字、非反斜線、非空格的任意字元。常用的分隔符號是正斜線(/)、hash符號(#) 以及取反符號(~),例如:

/foo bar/ #^[^0-9]$# ~php~

如果模式中包含分隔符,則分隔符需要使用反斜線()進行轉義。

/http:\/\//

如果模式中包含較多的分割字符,建議更換其他的字符作為分隔符,也可以採用preg_quote進行轉義。

$p = 'http://'; $p = '/'.preg_quote($p, '/').'/'; echo $p;

分隔符後面可以使用模式修飾符,模式修飾符包括:i, m, s, x等,例如使用i修飾符可以忽略大小寫匹配:

$str = "Http://www.imooc.com/"; if (preg_match('/http/i', $str)) { echo '匹配成功'; }

元與轉義

正則表達式中具有特殊含義的字符稱之為元字符,常用的元字符有:

一般用於轉義字符^ 斷言目標的開始位置(或在多行模式下是行首)
$ 斷言目標的結束位置(或在多行模式下是行尾)
. 匹配除換行符外的任何字元(預設)
[ 開始字元類別定義
] 結束字元類別定義
| 開始一個可選分支
( 子組的開始標記
) 子組的結束標記
? 作為量詞,表示0 次或1 次匹配。位於量詞後面用來改變量詞的貪婪特性。 (查閱量詞)
* 量詞,0 次或多次匹配
+ 量詞,1 次或多次匹配
{ 自訂量詞開始標記
} 自訂量詞結束標記
//下面的\s匹配任意的空白符,包括空格,制表符,换行符。[^\s]代表非空白符。[^\s]+表示一次或多次匹配非空白符。 $p = '/^我[^\s]+(苹果|香蕉)$/'; $str = "我喜欢吃苹果"; if (preg_match($p, $str)) { echo '匹配成功'; }

元字符具有兩種使用場景,一種是可以在任何地方都能使用,另一種是只能在方括號內使用,在方括號內使用的有:

轉義字符^ 僅在作為第一個字符(方括號內)時,表示字元類別取反
- 標記字元範圍

其中^在反括號外面,表示斷言目標的開始位置,但在方括號內部則代表字元類取反,方括號內的減號-可以標記字元範圍,例如0-9表示0到9之間的所有數字。 //下面的\w匹配字母或数字或下划线。 $p = '/[\w\.\-]+@[a-z0-9\-]+\.(com|cn)/'; $str = "我的邮箱是Spark.eric@imooc.com"; preg_match($p, $str, $match); echo $match[0];

貪婪模式與懶惰模式

正則表達式中每個元字符匹配一個字符,當使用+之後將會變的貪婪,它將匹配一個字符,但盡可能多的字符,但盡可能多的字符使用問號?字符時,它將盡可能少的匹配字符,既是懶惰模式。

貪婪模式:在可匹配與可不匹配的時候,優先匹配//下面的\d表示匹配数字 $p = '/\d+\-\d+/'; $str = "我的电话是010-12345678"; preg_match($p, $str, $match); echo $match[0]; //结果为:010-12345678

懶惰模式:在可匹配與可不匹配的時候,優先匹配$p = '/\d?\-\d?/'; $str = "我的电话是010-12345678"; preg_match($p, $str, $match); echo $match[0]; //结果为:0-1

的字元長度的時候,可以使用{}指定匹配字元數

$p = '/\d{3}\-\d{8}/'; $str = "我的电话是010-12345678"; preg_match($p, $str, $match); echo $match[0]; //结果为:010-12345678

使用正則表達式進行匹配

使用正則表達式的目的是為了實現比函數處理函數更加靈活的處理方式,因此跟字串處理函數一樣,其主要用來判斷子字串是否存在、字串替換、分割字串、取得模式子字串等。

PHP使用PCRE函式庫函數來進行正規處理,透過設定好模式,然後呼叫相關的處理函數來取得匹配結果。

preg_match用來執行一個匹配,可以簡單的用來判斷模式是否匹配成功,或者取得一個匹配結果,他的返回值是匹配成功的次數0或者1,在匹配到1次以後就會停止搜尋.

$subject = "abcdef"; $pattern = '/def/'; preg_match($pattern, $subject, $matches); print_r($matches); //结果为:Array ( [0] => def )上面的程式碼簡單的執行了一個匹配,簡單的判斷def是否能匹配成功,但是正則表達式的強大的地方是進行模式匹配,因此更多的時候,會使用模式:

$subject = "abcdef"; $pattern = '/a(.*?)d/'; preg_match($pattern, $subject, $matches); print_r($matches); //结果为:Array ( [0] => abcd [1] => bc ) 透過正規表示式可以匹配一個模式,得到更多有用的資料。

🎜

查找所有匹配结果

preg_match只能匹配一次结果,但很多时候我们需要匹配所有的结果,preg_match_all可以循环获取一个列表的匹配结果数组。

$p = "|<[^>]+>(.*?)]+>|i"; $str = "example:
this is a test
"; preg_match_all($p, $str, $matches); print_r($matches);

可以使用preg_match_all匹配一个表格中的数据:

$p = "/(.*?)<\/td>\s*(.*?)<\/td>\s*<\/tr>/i"; $str = "
Eric25
John26
"; preg_match_all($p, $str, $matches); print_r($matches);

$matches结果排序为$matches[0]保存完整模式的所有匹配, $matches[1] 保存第一个子组的所有匹配,以此类推。

正则表达式的搜索和替换

正则表达式的搜索与替换在某些方面具有重要用途,比如调整目标字符串的格式,改变目标字符串中匹配字符串的顺序等。

例如我们可以简单的调整字符串的日期格式:

$string = 'April 15, 2014'; $pattern = '/(\w+) (\d+), (\d+)/i'; $replacement = '$3, ${1} $2'; echo preg_replace($pattern, $replacement, $string); //结果为:2014, April 15

其中${1}与$1的写法是等效的,表示第一个匹配的字串,$2代表第二个匹配的。

通过复杂的模式,我们可以更加精确的替换目标字符串的内容。

$patterns = array ('/(19|20)(\d{2})-(\d{1,2})-(\d{1,2})/', '/^\s*{(\w+)}\s*=/'); $replace = array ('\3/\4/\1\2', '$\1 =');//\3等效于$3,\4等效于$4,依次类推 echo preg_replace($patterns, $replace, '{startDate} = 1999-5-27'); //结果为:$startDate = 5/27/1999 //详细解释下结果:(19|20)表示取19或者20中任意一个数字,(\d{2})表示两个数字,(\d{1,2})表示1个或2个数字,(\d{1,2})表示1个或2个数字。^\s*{(\w+)\s*=}表示以任意空格开头的,并且包含在{}中的字符,并且以任意空格结尾的,最后有个=号的。

用正则替换来去掉多余的空格与字符:

$str = 'one two'; $str = preg_replace('/\s+/', ' ', $str); echo $str; // 结果改变为'one two'

正则匹配常用案例

正则匹配常用在表单验证上,一些字段会有一定的格式要求,比如用户名一般都要求必须是字母、数字或下划线组成,邮箱、电话等也都有自己的规则,因此使用正则表达式可以很好的对这些字段进行验证。

版权声明:本文为博主原创文章,未经博主允许不得转载。

以上就介绍了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.能量晶體解釋及其做什麼(黃色晶體)
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解鎖Myrise中的所有內容
3 週前 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)

五個精選的Go語言開源項目,帶你探索科技世界 五個精選的Go語言開源項目,帶你探索科技世界 Jan 30, 2024 am 09:08 AM

在現今科技快速發展的時代,程式語言也如雨後春筍般湧現。其中一門備受矚目的語言就是Go語言,它以其簡潔、高效、並發安全等特性受到了許多開發者的喜愛。 Go語言以其強大的生態系統而著稱,其中有許多優秀的開源專案。本文將介紹五個精選的Go語言開源項目,帶領讀者一起探索Go語言開源專案的世界。 KubernetesKubernetes是一個開源的容器編排引擎,用於自

Go語言開發必備:5個熱門框架推薦 Go語言開發必備:5個熱門框架推薦 Mar 24, 2024 pm 01:15 PM

《Go語言開發必備:5個熱門框架推薦》Go語言作為一門快速、高效的程式語言,受到越來越多開發者的青睞。為了提高開發效率,優化程式碼結構,許多開發者選擇使用框架來快速建立應用。在Go語言的世界中,有許多優秀的框架可供選擇。本文將介紹5個熱門的Go語言框架,並提供具體的程式碼範例,幫助讀者更好地理解和使用這些框架。 1.GinGin是一個輕量級的Web框架,擁有快速

使用Golang的Web框架Echo框架實現分散式任務調度 使用Golang的Web框架Echo框架實現分散式任務調度 Jun 24, 2023 am 11:49 AM

隨著網路的發展與資訊科技的進步,大數據時代已經來臨,數據分析、機器學習等領域也得到了廣泛的應用。在這些領域中,任務調度是一個不可避免的問題。如何實現高效的任務調度,對於提高效率至關重要。在本篇文章中,將介紹如何使用Golang的Web框架Echo框架實現分散式任務調度。一、介紹Echo框架Echo是一個高效能、可伸縮、輕量級的GoWeb框架。它基於HTT

Laravel開發:如何使用Laravel Echo和Pusher實現WebSockets通訊? Laravel開發:如何使用Laravel Echo和Pusher實現WebSockets通訊? Jun 13, 2023 pm 05:01 PM

Laravel是一個流行的PHP框架,具有高度可擴展性和高效性,它提供了許多強大的工具和程式庫,讓開發者可以快速建立高品質的網路應用程式。其中,LaravelEcho和Pusher是兩個非常重要的工具,透過它們可以輕鬆實現WebSockets通信,本文將詳細介紹如何在Laravel應用程式中使用這兩個工具。什麼是WebSockets? WebSockets

PHP中echo關鍵字的作用與使用方法詳解 PHP中echo關鍵字的作用與使用方法詳解 Jun 28, 2023 pm 08:12 PM

PHP中echo關鍵字的作用和使用方法詳解PHP是一種廣泛使用的伺服器端腳本語言,它在網頁開發中被廣泛應用。而echo關鍵字是在PHP中用來輸出內容的一種方法。本文將詳細介紹echo關鍵字的作用與使用方法。作用:echo關鍵字的主要作用是將內容輸出到瀏覽器。在網頁開發中,我們需要將資料動態地呈現到前端頁面上,這時就可以使用echo關鍵字將資料輸出到頁面上。 e

探索Go語言框架:5個不容錯過的選擇! 探索Go語言框架:5個不容錯過的選擇! Feb 19, 2024 pm 02:29 PM

Go語言作為一種快速、高效的程式語言,一直受到程式設計師的青睞。在Go語言的生態系統中,框架扮演著至關重要的角色,幫助開發者更快速地建立應用程式。本文將介紹五個Go語言框架,讓你了解其特點和用法。 1.Gin框架Gin框架是一個輕量級的Web框架,具有快速、高效能的特性。使用Gin框架可以快速建立RESTfulAPI和Web應用程式。以下是一個簡單的範例程式碼:

市面上最流行的golang框架有哪些? 市面上最流行的golang框架有哪些? Jun 01, 2024 pm 08:05 PM

目前最受歡迎的Go框架有:Gin:輕量級、高效能的Web框架,簡潔易用。 Echo:快速、高度可自訂的網路框架,提供高效能路由和中介軟體。 GorillaMux:快速、靈活的多工器,提供進階路由設定選項。 Fiber:效能最佳化的高效能Web框架,處理高並發請求。 Martini:物件導向設計的模組化網路框架,提供豐富的功能集。

探索一下,Go語言常用的框架有哪些? 探索一下,Go語言常用的框架有哪些? Feb 18, 2024 pm 10:53 PM

Go語言作為一種高效、現代化的程式語言,廣受開發者的青睞。在Go語言中,存在著許多優秀的框架,這些框架能夠幫助開發者快速建立高效且穩定的應用程式。本文將介紹一些Go語言中熱門的框架,並提供一些具體的程式碼範例。 Gin框架Gin是一個非常受歡迎的Goweb框架,它提供了快速開發API的功能。 Gin框架具有高效能、易用、輕量級等特點,廣泛應用於網路公司的後端開發

See all articles