(獨孤九劍) 正規表示式

2022-04-04 07:45:58 字數 3904 閱讀 4029

【一】適用場景

郵箱驗證,手機號碼,驗證碼,替換敏感詞(罵人換成**),文件採集,表情替換技術(早期),模板引擎解析

【二】定界符

定界符就是用來定義邊界

注意:定界符不能用a-za-z0-9和 \和(),其他都可以用,但必須成對出現,又開始有結束

區分 \ 和 /,\ 為轉義字元, / 為正則字元

轉義字元:將 / 轉為字串形式,因為例如$str = '/ / /'這種形式的正則無法識別中間的/,所以需要 \ 轉義字元,將中間的 / 轉義為符號才能使用。

例如需要正則匹配 \ 時:

$str = '/ \/ /';

或者$str = "/ '/' /";

或者修改定界符

$str = "@ / @"

定界符寫法舉例:

<?php

$str = '% %';

$str = '^ ^';

$str = '$ $';

$str = '/ /';

$str = '@ @';

$str = '# #';

$str = '( )';//

錯誤$str = 'a a';//

錯誤?>

最常用的為/

【三】元字元

^,\d及$等符號代表了特定的匹配意義,我們稱之為元字元,常見元字元有

.       除換行符外任意字元;

\w    a-za-z0-9(字母或數字、下劃線);-----word字母

\s     空白符\n,\t,\r,空格;-----------------spacing間隙

空白符是指空格符' '、水平製表符'\t'、垂直製表符'\v'、換行符'\n'、回車符'\r'、換頁符'\f'之類的字元

\d    0-9數字;---------------------------digit數字

\b    詞邊界(單詞的開始或結束);---------begin開始

^     字串開始;

$     字串結束;

[x]   匹配x字元,如匹配字串裡的a,b,c字元;

\w   \w的轉義,除了a-za-z0-9之外的任意字元;

\s   匹配任何非空白的字元;

\d   0-9以外,匹配任何的字元;

\b   非邊界(匹配不是單詞開頭或結束位置的字元);

[^x] 匹配除了x以外任意字元,如[^abc]匹配除了abc以外任意字元

例如:[^0-9a-za-z]中因為有抑揚符,所以變成了匹配0-9a-za-z之外的字元

注意:

①當我們要匹配這些元字元的時候,我們需要用到字元轉義功能,同樣正規表示式裡面用 \ 來表示轉義,如要匹配 . 符號,則需要用 \. ,否則 . 會被解釋成「除換行符外的任意字元」。當然,要匹配 \ ,則需要寫成 \\

②連續的數字或字母可以用 – 符號連線起來,如 匹配所有的小寫字母,[1-5] 匹配 1 至 5 這 5 個數字

【四】正規表示式中的原子(最小單位)

原子是正規表示式的最小單位,乙個成立的正規表示式必須至少包含乙個原子

包含:空格,a-zaz,換行,0-9,中文,標點符號,特殊符號等全為原子

原子等價式:

\d      0-9

\w     a-za-z0-9

\s      \t,\n,\v,\r,空格

\d     [^0-9]

\w    [^a-za-z0-9]

\s     [^\t\n\f\r]

【五】迴圈字元

正規表示式用一些重複規則來表達迴圈匹配

常用的重複如下:

*           重複0次或更多次;

+          重複1次或更多次;

?        重複0次或1次;

有且只能重複n次;

至少重複n次;

可以重複n到m次;

<?php

if (preg_match("/\w?/", "2kkk6k3",$match

)) else

?>

【六】正則函式

preg_match() 第一次匹配成功後就會停止匹配,如果要實現全部結果的匹配,即搜尋到subject結尾處,則需使用 preg_match_all() 函式

(1)php匹配正則函式:preg_match()

preg_match() 函式用於進行正規表示式匹配,成功返回 1 true,否則返回 0 false。

preg_match() 匹配成功一次後就會停止匹配,如果要實現全部結果的匹配,則需使用preg_match_all() 函式。

語法:preg_match(正規表示式,匹配變數,儲存匹配結果的陣列)

<?php

if (preg_match("/it/i", "hitony",$match

)) else

?>

(2)preg_match_all()

preg_match_all() 函式用於進行正規表示式全域性匹配,成功返回整個模式匹配的次數(可能為零),如果出錯返回 false

【七】模式修正符

模式修正符是標記在整個正規表示式之外的,可以看著是對正規表示式的一些補充說明

常用的模式修正符如下:

i          模式中的字元將同時匹配大小寫字母

if (preg_match("/abc/i", "abc",$match

)) else

m       字串視為多行

s        將字串視為單行,換行符作為普通字元

x        將模式中的空白忽略

e        preg_replace() 函式在替換字串中對逆向引用作正常的替換,將其作為 php **求值,並用其結果來替換所搜尋的字串。

a       強制僅從目標字串的開頭開始匹配

d       模式中的 $ 元字元僅匹配目標字串的結尾

u       匹配最近的字串

u       模式字串被當成 utf-8

【八】或者(分枝)

分枝是指制定幾個規則,如果滿足任意一種規則,則都當作匹配成功。具體來說就是用 | 符號把各種規則分開,且條件從左至右匹配。

下面是乙個使用分枝的例子。

\d-\d|\d

【九】常用正則

郵箱,手機號,**,自定義格式,採集器

【十】正則練習

(1)必須以start開始,以end結束,中間有乙個或更多數字

<?php

$pattern = '

/^start\d+end$/';

$string1 = "

start666end";

if(preg_match($pattern,$string1,$match))

else

?>

(2)必須以end結束

$pattern = '

/start\d+end$/

';

(3)必須以start開始

$pattern = '

/^start\d+end/

';

(4)匹配非數字,即字母。以字母開始以字母結束(只能匹配乙個)

$pattern = '

/^[^0-9]$/';

$string1 = "a"

;//匹配成功

(5)匹配非數字,即字母。以字母開始以字母結束(能匹配多個)

$pattern = '

/^[^0-9]+$/';

$string1 = "

abc";//

匹配成功

獨孤九劍之Lambda表示式公升級

今日發表了關於 c 3.0引入lambda表示式 的文章,大學好友小哲子,嫌棄科學家的語法不夠簡潔,故深入研究了一番,原來,lambda表示式,還可以更簡潔!using system using system.collections.generic using system.linq using s...

(獨孤九劍) 環境安裝

一 什麼是開發環境?php是開發語言,針對開發語言寫出的 通常需要在指定的軟體下執行。針對開發語言的軟體和 都稱為開發環境 二 windows環境安裝 1.伺服器種類 伺服器就是一台提供特殊服務的電腦,如 網頁伺服器 顯示網頁的伺服器 電子郵件伺服器 顯示電子郵件收發的伺服器 遊戲伺服器 顯示各個玩...

獨孤九劍與設計模式

且看 笑傲江湖 中風清揚的獨孤九劍 有進無退,招招都是進攻,使攻敵不得不守。雖只一劍九式,卻是變化無窮,學到後來,前後式融會貫通,更是威力大增。能料到他要出甚麼招,反招卻搶在他頭里。敵人手還沒提起,你長劍已指向他的要害,他再快也沒你快。料敵機先 和 活學活用 這八個字,正是這套劍法的精要所在。設計模...