在之前的文章中給大家?guī)?lái)了《PHP中怎樣執(zhí)行正則表達(dá)式的搜索和替換?》,其中詳細(xì)的介紹了PHP中執(zhí)行正則表達(dá)式搜索和替換的相關(guān)知識(shí),本篇我們繼續(xù)來(lái)看一下正則表達(dá)式中字符串分割和轉(zhuǎn)義的相關(guān)知識(shí),希望對(duì)大家有幫助!
之前的文章中我們了解了PHP中執(zhí)行全局正則表達(dá)式的匹配、檢測(cè)與給定模式匹配的數(shù)組元素、執(zhí)行一個(gè)正則表達(dá)式的搜索和替換這樣的操作我們可以通過(guò)preg_match()
函數(shù)、preg_match_all()
函數(shù)、preg_grep()
函數(shù)和preg_replace()
函數(shù)就能夠?qū)崿F(xiàn),使用正則表達(dá)式的主要目的就是為了通過(guò)簡(jiǎn)單的辦法來(lái)實(shí)現(xiàn)強(qiáng)大的功能。
其中對(duì)于正則表達(dá)式與字符串之間的操作還有很多,其中就包括使用正則表達(dá)式分割字符串,那接下來(lái)我們就一起來(lái)看一下,我們?cè)鯓油ㄟ^(guò)字符表達(dá)式來(lái)分割字符串。
preg_split()
函數(shù)
在PHP中 preg_split()
函數(shù)通過(guò)一個(gè)正則表達(dá)式來(lái)分割字符串,該函數(shù)的語(yǔ)法格式如下:
array preg_split ( string $pattern , string $subject [, int $limit = -1 [, int $flags = 0 ]] )
其中需要注意的是:
$pattern
表示用于匹配的模式,也即正則表達(dá)式;$subject
表示要分隔的字符串;$limit
是個(gè)可選參數(shù),如果指定,就將限制分隔得到的子串最多只有 limit 個(gè),并且最后一個(gè)子串將包含所有剩余部分。limit 值為 -1
、0
或 NULL
時(shí)都代表“不限制”,建議使用 NULL。
$flags
是個(gè)可選參數(shù),它有 3 個(gè)取值。若設(shè)置為 PREG_SPLIT_NO_EMPTY
,則 preg_split() 將返回分隔后的非空部分。若設(shè)置為 PREG_SPLIT_DELIM_CAPTURE
,則分隔的模式中的括號(hào)表達(dá)式將被捕獲并返回。若設(shè)置為 PREG_SPLIT_OFFSET_CAPTURE
,則對(duì)于每一個(gè)出現(xiàn)的匹配返回時(shí)會(huì)附加字符串偏移量。
這將會(huì)改變返回?cái)?shù)組中的每一個(gè)元素,使每個(gè)元素成為一個(gè)由第 0 個(gè)元素為分隔后的子串、第 1 個(gè)元素為該子串在 subject 中的偏移量組成的數(shù)組。返回值就是返回一個(gè)使用 pattern 分割 subject 字符串后得到的子串組成的數(shù)組。
接下來(lái)我們通過(guò)示例來(lái)看一下 preg_split() 函數(shù)的用法,示例如下:
<?php echo "<pre>"; $subject = 'PHP中文網(wǎng):http://www.php.cn/, baidu百度:http://www.baidu.com/'; $pattern = '/[s,:]+/'; print_r( preg_split($pattern, $subject) ); print_r( preg_split($pattern, $subject, 3) ); ?>
輸出結(jié)果:
示例如下:
<?php $str = 'father mother andyou'; var_dump($str); $chars = preg_split('/ /', $str, -1, PREG_SPLIT_OFFSET_CAPTURE); var_dump($chars); ?>
輸出結(jié)果:
由上述示例能夠看出,通過(guò)preg_split() 函數(shù)能夠完成通過(guò)一個(gè)真?zhèn)€表達(dá)式來(lái)分割字符串。接下來(lái)我們來(lái)看一下,怎樣對(duì)正則表達(dá)式來(lái)進(jìn)行轉(zhuǎn)義。
PHP preg_quote()
函數(shù)
普通字符包括沒(méi)有顯式指定為元字符的所有可打印和不可打印字符,包括所有大小寫(xiě)字母、數(shù)字、標(biāo)點(diǎn)符號(hào)和一些符號(hào)。最簡(jiǎn)單的正則表達(dá)式是用于搜索字符串相比較的單個(gè)普通字符。例如,單字符正則表達(dá)式/A/會(huì)始終匹配字母 A。
除普通字符之外,正則表達(dá)式還可以包含“元字符”。元字符可分為單字符元字符和多字符元字符。例如,元字符d,它與數(shù)字字符相匹配。
PHP preg_quote()
函數(shù)用來(lái)對(duì)正則表達(dá)式字符串進(jìn)行轉(zhuǎn)義,也就是在特殊字符前邊增加一個(gè)反斜杠,該函數(shù)的語(yǔ)法格式如下:
preg_quote($str [, $delimiter = NULL])
其中需要注意的是:
$str
表示正則表達(dá)式字符串;$delimiter
是個(gè)可選參數(shù),額外增加的需要轉(zhuǎn)義的字符。如果指定了 $delimiter
參數(shù),被指定的字符也會(huì)被轉(zhuǎn)義。這通常用于轉(zhuǎn)義 PCRE 函數(shù)使用的分隔符。 /
是最常見(jiàn)的分隔符。
preg_quote()
函數(shù)會(huì)向參數(shù) $str
提供的每個(gè)正則表達(dá)式的字符前增加一個(gè)反斜線。這通常用于一些運(yùn)行時(shí)字符串需要作為正則表達(dá)式進(jìn)行匹配的時(shí)候。
正則表達(dá)式特殊字符有:.
+
*
?
[
^
]
$
(
)
{
}
=
!
<
>
|
:
-
。要清楚/
不是正則表達(dá)式特殊字符。
接下來(lái)我們通過(guò)示例來(lái)看一下使用 preg_quote() 函數(shù)對(duì)字符串進(jìn)行轉(zhuǎn)義,示例如下:
<?php $url = 'http://www.baidu.com/'; echo preg_quote($url) . "<br />"; echo preg_quote($url, "/") . "<br />"; $textbody = "baidu百度 is *very* good to study."; $word = "*very*"; echo preg_replace( "/".preg_quote($word)."/", "<i>".$word."</i>", $textbody ); ?>
輸出結(jié)果:
示例如下:
<?php $keywords = '$40 for a g3/400'; $keywords = preg_quote($keywords, '/'); echo $keywords; // 返回 $40 for a g3/400 ?>
輸出結(jié)果:
上述示例中,便是通過(guò)preg_quote() 函數(shù)用來(lái)對(duì)正則表達(dá)式字符串進(jìn)行轉(zhuǎn)義。
大家如果感興趣的話(huà),可以點(diǎn)擊《PHP視頻教程》、《正則表達(dá)式手冊(cè)》進(jìn)行