久久久久久久av_日韩在线中文_看一级毛片视频_日本精品二区_成人深夜福利视频_武道仙尊动漫在线观看

PHP中的正則表達(dá)式實(shí)例詳解

在編程里基本都會用到正則表達(dá)式來處理數(shù)據(jù),那么下面就具體在PHP中怎么運(yùn)用吧,本文通過具體的實(shí)例,給大家講解了PHP中正則表達(dá)式的使用方法。

最近使用 PHP 寫了一個應(yīng)用,主要是正則表達(dá)式的處理,趁機(jī)系統(tǒng)性的學(xué)習(xí)了相應(yīng)知識。
這篇文章的寫作方式不是講理論,而是通過具體的例子來了解正則,這樣也更有實(shí)踐性,在此基礎(chǔ)上再去看正則表達(dá)式的基本概念會更有收獲。

禁止分組的捕獲

在正則中分組很有用,可以定義子模式,然后可以通過后向引用來引用分組的內(nèi)容,但是有的時候僅僅想通過分組來進(jìn)行范圍定義,而不想被分組來捕獲,通過一個例子就能明白:

$str = "http://www.google.com";
$preg= "/http:\/\/\w+\.\w+.(?:net|com|cn)+/is";
$preg2= "/http:\/\/\w+\.\w+.(net|com|cn)+/is";
preg_match($preg,$str,$arr);
preg_match($preg2,$str,$arr2);

當(dāng)模式中出現(xiàn)?:表示這個括號的分組不會被引用,運(yùn)行下例子就能明白。

preg_match() 和 preg_match_all() 的區(qū)別

preg_match() 在匹配模式的時候匹配到一次就結(jié)束,而 preg_match_all() 則進(jìn)行全局匹配,通過一個例子就能明白:

$str='hello world china';
$preg="/\w+\s/is";
preg_match($preg,$str,$arr);
print_r($arr);
preg_match_all($preg,$str,$arr);
print_r($arr);

正確理解 $ 和 ^

先說一個正則,為了匹配是否是手機(jī)號:

$str = "13521899942a";
$preg="/1[\d]{3,15}/is";
if (preg_match($preg,$str,$arr)) {
  echo "ok";
}

雖然字符串中有一個英文字母,但是這個子模式卻匹配了,原因就在于模式匹配到后就結(jié)束了,不會再去尋找英文字母,為了解決這問題 $ 和 ^ 就發(fā)揮作用了,比如讓字符串的開始和結(jié)尾必須匹配一定的模式,修改如下:

$str = "13521899942a";
$preg="/1[\d]{3,15}$/is";
if (preg_match($preg,$str,$arr)) {
  echo "ok";
}

$ 和 ^ 的跨行模式

默認(rèn)的情況下,$ 和 ^ 只會匹配完整段落的開始和結(jié)尾,但是通過改變選項,允許匹配文本的每一行的開始和結(jié)尾,通過下面的例子就能明白

$str='hello
world';
$preg='/\w+$/ism';//$preg='/(?m)\w+$/is';
preg_match_all($preg,$str,$arr);
print_r($arr);

分組命名

在正則中通過括號分組后,可以使用 \1,\2 這樣的數(shù)字進(jìn)行后向引用,但是假如正則中模式太多,在使用的時候就會比較混亂,這時候可以采用分組命名來進(jìn)行引用,看個例子:

$str ="email:ywdblog@gmail.com;";
preg_match("/email:(?<email>\w+?)/is", $str, $matches);
echo $matches["email"] . "_" . $matches['no'];

懶惰模式

正則在匹配的時候是貪婪的,只要符合模式就會一直匹配下去,下面的例子,匹配到的文本是 <h2>hello</h2><h2>world</h2>


$str = "<h2>hello</h2><h2>world</h2>";
$preg = "/<h2>.*<\/h2>/is";
preg_match($preg,$str,$arr);
print_r($arr);

通過改變一個選項可以修改為懶惰模式,就是一旦匹配到就中止,修改代碼如下:

$str = "<h2>hello</h2><h2>world</h2>";
$preg = "/<h2>.*?<\/h2>/is";
preg_match($preg,$str,$arr);
print_r($arr);

進(jìn)一步理解 preg_match_all()

通過這函數(shù)的最后一個參數(shù),能夠返回不同形式的數(shù)組:

$str= 'jiangsu (nanjing) nantong
guangdong (guangzhou) zhuhai
beijing (tongzhou) haidian';
$preg = '/^\s*+([^(]+?)\s\(([^)]+)\)\s+(.*)$/m';
preg_match_all($preg,$str,$arr,PREG_PATTERN_ORDER);
print_r($arr);
preg_match_all($preg,$str,$arr,PREG_SET_ORDER);
print_r($arr);

強(qiáng)大的正則替換回調(diào)

雖然 preg_replace() 函數(shù)能完成大多數(shù)的替換,但是假如你想更好的控制,可以使用回調(diào),不用多說看例子:

$str = "china hello world";
$preg = '/\b(\w+)(\w)\b/';
function fun($m){
    return $m[1].strtoupper($m[2]);
}
echo preg_replace_callback($preg,"fun",$str);

在這一點(diǎn)上,PHP 比 Python 強(qiáng)大的多,Python 中沒有正則回調(diào),不過可以使用閉包的方式解決,可看我以前的文章。

preg_quote()

這個函數(shù)類似于 Python 中的 re.compile() 函數(shù),假如在模式中一些元字符僅僅想表達(dá)字符的本身含義,可以轉(zhuǎn)義,但是假如在模式中寫太多的轉(zhuǎn)義,會顯得很混亂,可以使用這個函數(shù)來統(tǒng)一轉(zhuǎn)義:

$str = '\\*china*world';
$preg = "\*china";
$preg = preg_quote($preg);
echo $preg;
preg_match( "/{$preg}/is",$str,$arr);
print_r($arr);

向前查找 ?= 的妙用

用英文解釋可能比較貼切:

【網(wǎng)站聲明】本站除付費(fèi)源碼經(jīng)過測試外,其他素材未做測試,不保證完整性,網(wǎng)站上部分源碼僅限學(xué)習(xí)交流,請勿用于商業(yè)用途。如損害你的權(quán)益請聯(lián)系客服QQ:2655101040 給予處理,謝謝支持。

相關(guān)文檔推薦

這篇文章主要介紹了PHP正在進(jìn)行時-變量詳解及字符串動態(tài)插入變量的方法,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
這篇文章主要介紹了PHP正則匹配操作,結(jié)合簡單實(shí)例形式分析了php中preg_match_all針對HTML標(biāo)簽中P元素及img src元素內(nèi)容的獲取技巧,需要的朋友可以參考下
這篇文章主要介紹了PHP正則匹配中英文、數(shù)字及下劃線的方法,可用于針對用戶名的驗證操作,需要的朋友可以參考下
這篇文章主要介紹了PHP正則刪除HTML代碼中寬高樣式的方法,涉及php針對HTML代碼的正則匹配、替換等操作技巧,需要的朋友可以參考下
這篇文章主要介紹了php正則刪除img標(biāo)簽的方法,結(jié)合具體實(shí)例形式分析了php針對img標(biāo)簽正則匹配相關(guān)操作技巧,需要的朋友可以參考下
這篇文章主要介紹了PHP正則刪除html代碼中a標(biāo)簽并保留標(biāo)簽內(nèi)容的方法,涉及php基于正則的字符串匹配與子表達(dá)式操作相關(guān)技巧,需要的朋友可以參考下
主站蜘蛛池模板: 亚洲一区电影 | 日韩快播电影网 | 国产激情一区二区三区 | 精品成人在线 | 日韩欧美三级在线 | 亚洲一区二区三区在线视频 | 人人九九精 | 日韩欧美成人精品 | 日韩中文字幕一区二区 | 亚洲精品成人在线 | 国产精品久久久久久久毛片 | 免费视频一区二区 | 最新中文字幕在线 | 精品一区二区三区在线观看国产 | 日本免费在线观看视频 | 亚洲欧美中文日韩在线v日本 | 日批免费在线观看 | 精品久久久久久一区二区 | 在线中文视频 | 日日夜夜天天 | 国产成人免费一区二区60岁 | 亚洲综合在线视频 | 91精品国产自产在线老师啪 | 91免费小视频 | 亚洲一区二区三区四区五区午夜 | 国产精品久久久久免费 | 国产成人jvid在线播放 | 日韩av一区二区在线观看 | 一级片视频免费 | 人人玩人人添人人澡欧美 | 精品国产99 | 精品一二三 | 亚洲免费久久久 | 欧美激情视频网站 | 免费视频一区 | 国产91在线 | 亚洲 | 亚洲国产在 | 免费大黄视频 | 久久99精品久久久久久国产越南 | 在线观看免费观看在线91 | 性色av一区二区三区 |