如何在正則表達(dá)式中使用模式修正符?針對(duì)這個(gè)問(wèn)題,這篇文章詳細(xì)介紹了相對(duì)應(yīng)的分析和解答,希望可以幫助更多想解決這個(gè)問(wèn)題的小伙伴找到更簡(jiǎn)單易行的方法。
成都創(chuàng)新互聯(lián)歡迎聯(lián)系:13518219792,為您提供成都網(wǎng)站建設(shè)網(wǎng)頁(yè)設(shè)計(jì)及定制高端網(wǎng)站建設(shè)服務(wù),成都創(chuàng)新互聯(lián)網(wǎng)頁(yè)制作領(lǐng)域10多年,包括石雕等多個(gè)領(lǐng)域擁有多年的網(wǎng)站營(yíng)銷(xiāo)經(jīng)驗(yàn),選擇成都創(chuàng)新互聯(lián),為網(wǎng)站保駕護(hù)航。
什么是模式修正符?
1, 模式修正符就是幾個(gè)字母,我們?cè)诿總€(gè)正則表達(dá)式中可以一次使用一個(gè),也可以連續(xù)使用多個(gè),每一個(gè)具一定的意義。
2, 模式修正符是對(duì)整個(gè)正則表達(dá)式調(diào)優(yōu)使用,也可以說(shuō)是對(duì)正則表達(dá)式功能的擴(kuò)展。
還記得正則表達(dá)式的那個(gè)公式嗎?'/原子和元字符/模式修正符',其中正斜線(xiàn)為邊界符。
模式修正符的構(gòu)成
模式修正符就是字母,只不過(guò)這些在模式修正符的應(yīng)用之中有特殊的含義。下面我來(lái)看看都有哪些模式修正符,請(qǐng)看下表:
模式修正符 | 說(shuō)明 |
i | 表示在和模式進(jìn)行匹配進(jìn)不區(qū)分大小寫(xiě) |
m | 將模式視為多行,使用^和$表示任何一行都可以以正則表達(dá)式開(kāi)始或結(jié)束 |
s | 如果沒(méi)有使用這個(gè)模式修正符號(hào),元字符中的"."默認(rèn)不能表示換行符號(hào),將字符串視為單行 |
x | 表示模式中的空白忽略不計(jì) |
e | 正則表達(dá)式必須使用在preg_replace替換字符串的函數(shù)中時(shí)才可以使用(講這個(gè)函數(shù)時(shí)再說(shuō)) |
A | 以模式字符串開(kāi)頭,相當(dāng)于元字符^ |
Z | 以模式字符串結(jié)尾,相當(dāng)于元字符$ |
U | 正則表達(dá)式的特點(diǎn):就是比較“貪婪”,使用該模式修正符可以取消貪婪模式 |
由于i表示匹配不區(qū)分大小寫(xiě),在下面的示例中,我們不再進(jìn)行演示,我們來(lái)看一下其他模式修正符的示例。
1,模式修正符m。
復(fù)制代碼 代碼如下:
$pattern = '/^abc/m';
$string = 'bcd
abc
cba';
if (preg_match($pattern, $string, $arr)) {
echo "正則表達(dá)式{$pattern}和字符串{$string}匹配成功
";
print_r($arr);
} else {
echo "正則表達(dá)式{$pattern}和字符串{$string}匹配失敗";
}
?>
匹配結(jié)果是成功的。注意:我們?cè)谑褂媚J叫拚鹠的時(shí)候,將匹配字符串看成是多行而不是默認(rèn)的單行,所以任何一行只要是以abc開(kāi)頭,就匹配成功。但是,如果能匹配的行前面有空格的話(huà),就不能匹配了!除非修改正則表達(dá)式的匹配模式。
2,模式修正符s。
復(fù)制代碼 代碼如下:
$pattern = '/a.*c/s';
$string = 'adsadsa
c';
if (preg_match($pattern, $string, $arr)) {
echo "正則表達(dá)式{$pattern}和字符串{$string}匹配成功
";
print_r($arr);
} else {
echo "正則表達(dá)式{$pattern}和字符串{$string}匹配失敗";
}
?>
這次的匹配記過(guò)也是成功的。如果你將上例中的模式修正符s去掉的話(huà),匹配就會(huì)失敗。因?yàn)槟J叫拚鹲將匹配字符串看作是單行的,所以這個(gè)時(shí)候,元字符中的"."就可以表示換行符號(hào)了。
3,模式修正符x。
復(fù)制代碼 代碼如下:
$pattern = '/a c/x';
$string = 'a c';
if (preg_match($pattern, $string, $arr)) {
echo "正則表達(dá)式{$pattern}和字符串{$string}匹配成功
";
print_r($arr);
} else {
echo "正則表達(dá)式{$pattern}和字符串{$string}匹配失敗";
}
?>
這次的匹配結(jié)果是失敗的。因?yàn)槲覀兪褂媚J叫拚鹸取消了模式中的空格。注意:我們無(wú)法使用模式修正符取消\s表示的空白。
4,模式修正符A。
復(fù)制代碼 代碼如下:
$pattern = '/ac/A';
$string = 'acahgyghvbm';
if (preg_match($pattern, $string, $arr)) {
echo "正則表達(dá)式{$pattern}和字符串{$string}匹配成功
";
print_r($arr);
} else {
echo "正則表達(dá)式{$pattern}和字符串{$string}匹配失敗";
}
?>
正則表達(dá)式表示的含義是匹配以ac開(kāi)頭的字符串,結(jié)果成功。
模式修正符Z表示的是以字符串結(jié)尾的匹配,和A的用法是一樣的,我們不再進(jìn)行演示。
5,模式修正符U。
這個(gè)模式修正符是十分重要的!在正則表達(dá)式中,其本身是“貪婪”的。那什么是貪婪模式呢?貪婪模式的意思就是說(shuō),正則表達(dá)式默認(rèn)會(huì)在查找到第一個(gè)匹配后,繼續(xù)嘗試后面的匹配,如果能找到匹配,則匹配最大的范圍字符串。但有的時(shí)候這并不是我們想要的結(jié)果,所以我們需要取消貪婪模式。
我們還是先看一個(gè)貪婪模式的例子:
復(fù)制代碼 代碼如下:
$pattern = '/.*<\/b>/';
$string = 'welcome to phpfuns';
if (preg_match($pattern, $string, $arr)) {
echo "正則表達(dá)式{$pattern}和字符串{$string}匹配成功
";
print_r($arr);
} else {
echo "正則表達(dá)式{$pattern}和字符串{$string}匹配失敗";
}
?>
這個(gè)實(shí)例的本意是匹配welcome,但是結(jié)果卻匹配了welcome to phpfuns整個(gè)字符串(注意我們的字符串'welcome to phpfuns',其開(kāi)頭和結(jié)尾正好構(gòu)成了正則表達(dá)式的模式匹配,所以匹配成功),這就是正則表達(dá)式的貪婪模式。當(dāng)然,這不是我們要的結(jié)果。
取消貪婪模式
我們可以使用模式修正符U和元字符?兩種方式取消正則表達(dá)式的貪婪模式。
模式修正符U取消貪婪模式
復(fù)制代碼 代碼如下:
$pattern = '/.*<\/b>/U';
$string = 'welcome to phpfuns';
if (preg_match($pattern, $string, $arr)) {
echo "正則表達(dá)式{$pattern}和字符串{$string}匹配成功
";
print_r($arr);
} else {
echo "正則表達(dá)式{$pattern}和字符串{$string}匹配失敗";
}
?>
元字符?取消貪婪模式
復(fù)制代碼 代碼如下:
$pattern = '/.*?<\/b>/';
$string = 'welcome to phpfunsdsadsadas';
if (preg_match($pattern, $string, $arr)) {
echo "正則表達(dá)式{$pattern}和字符串{$string}匹配成功
";
print_r($arr);
} else {
echo "正則表達(dá)式{$pattern}和字符串{$string}匹配失敗";
}
?>
關(guān)于如何在正則表達(dá)式中使用模式修正符問(wèn)題的解答就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,如果你還有很多疑惑沒(méi)有解開(kāi),可以關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道了解更多相關(guān)知識(shí)。