模式修正符:i 忽略大小寫 g 全局匹配
特別字符
比較重要的兩個(gè)方面:
preg_replace — 執(zhí)行一個(gè)正則表達(dá)式的搜索和替換,搜索subject中匹配pattern的部分, 以replacement進(jìn)行替換。
preg_replace ( pattern ,replacement , $subject )
返回值:
如果subject是一個(gè)數(shù)組, preg_replace()返回一個(gè)數(shù)組, 其他情況下返回一個(gè)字符串。
如果匹配被查找到,替換后的subject被返回,其他情況下 返回沒(méi)有改變的 subject。如果發(fā)生錯(cuò)誤,返回 NULL 。
后向引用
關(guān)于php的貪婪模式詳解
.* 是貪婪模式 .*? 取消貪婪模式。
貪婪模式
用?取消貪婪
大U取消貪婪
preg_match():preg_match — 執(zhí)行一個(gè)正則表達(dá)式匹配
int preg_match( string pattern, string subject [, array matches ] )
pattern:正則表達(dá)式
subject:需要匹配檢索的對(duì)象
matches:可選,存儲(chǔ)匹配結(jié)果的數(shù)組, $matches[0] 將包含與整個(gè)模式匹配的文本,$matches[1] 將包含與第一個(gè)捕獲的括號(hào)中的子模式所匹配的文本,以此類推
preg_match_all() 函數(shù)用于進(jìn)行正則表達(dá)式全局匹配,成功返回整個(gè)模式匹配的次數(shù)(可能為零),如果出錯(cuò)返回 FALSE 。
preg_replace — 執(zhí)行一個(gè)正則表達(dá)式的搜索和替換
preg_match() 返回 pattern 所匹配的次數(shù)。要么是 0 次(沒(méi)有匹配)或 1 次,因?yàn)?preg_match() 在第一次匹配之后將停止搜索。preg_match_all() 則相反,會(huì)一直搜索到 subject 的結(jié)尾處。如果出錯(cuò) preg_match() 返回 FALSE。
mixed preg_replace ( mixed $pattern , mixed $replacement , mixed $subject [, int $limit = -1 [, int &$count ]] )
搜索subject中匹配pattern的部分, 以replacement進(jìn)行替換。
preg_split — 通過(guò)一個(gè)正則表達(dá)式分隔字符串
array preg_split ( string $pattern , string $subject [, int $limit = -1 [, int $flags = 0 ]] )
eg:
<?php
//使用逗號(hào)或空格(包含" ", \r, \t, \n, \f)分隔短語(yǔ)
$keywords = preg_split ( "/[\s,]+/" , "hypertext language, programming" );
print_r ( $keywords );
?>
輸出:
Array
(
[0] => hypertext
[1] => language
[2] => programming
)
匹配中文的實(shí)例
匹配到了中文
<?php
$str = '中文';
//匹配utf8
//$pattern = '/[\x{4e00}-\x{9fa5}]/u';
//匹配GB2312
//$pattern = '/['.chr(0xb0).'-'.chr(0xf7).']['.chr(0xa1).'-'.chr(0xfe).']/';
preg_match($pattern, $str, $match);
var_dump($match);
<img.*?src=["|'](.*?)["|'].*?\/?>
.*?a
就是取前面任意長(zhǎng)度的字符,到底一個(gè) a 出現(xiàn),匹配如下
q@wer_qwerqweraljlkjlkjlkj
得到:q@wer_qwerqwera 這部分,如果匹配不到后面的 a 字符,則匹配為空。
匹配URL:
郵箱:
<?php
$str = "cheng@163.com";
$pattern = '/^\w{5,15}@[a-z0-9]+(\.[a-z]+)+$/';
preg_match($pattern,$str,$match);
print_r($match);
ip地址:
//匹配ip地址:
$str = "192.56.20.253";
$pattern = '/^([1-9]|[1-9]\d|1\d\d|2[01]\d|22[0-3])(\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])){3}$/';
preg_match($pattern,$str,$match);
print_r($match);
參考github