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

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

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

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

禁止分組的捕獲

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

$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)?:表示這個(gè)括號(hào)的分組不會(huì)被引用,運(yùn)行下例子就能明白。

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

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

$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);

正確理解 $ 和 ^

先說(shuō)一個(gè)正則,為了匹配是否是手機(jī)號(hào):

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

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

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

$ 和 ^ 的跨行模式

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

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

分組命名

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

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

懶惰模式

正則在匹配的時(shí)候是貪婪的,只要符合模式就會(huì)一直匹配下去,下面的例子,匹配到的文本是 <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);

通過(guò)改變一個(gè)選項(xiàng)可以修改為懶惰模式,就是一旦匹配到就中止,修改代碼如下:

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

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

通過(guò)這函數(shù)的最后一個(gè)參數(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),不用多說(shuō)看例子:

$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 中沒(méi)有正則回調(diào),不過(guò)可以使用閉包的方式解決,可看我以前的文章。

preg_quote()

這個(gè)函數(shù)類(lèi)似于 Python 中的 re.compile() 函數(shù),假如在模式中一些元字符僅僅想表達(dá)字符的本身含義,可以轉(zhuǎn)義,但是假如在模式中寫(xiě)太多的轉(zhuǎn)義,會(huì)顯得很混亂,可以使用這個(gè)函數(shù)來(lái)統(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)過(guò)測(cè)試外,其他素材未做測(cè)試,不保證完整性,網(wǎng)站上部分源碼僅限學(xué)習(xí)交流,請(qǐng)勿用于商業(yè)用途。如損害你的權(quán)益請(qǐng)聯(lián)系客服QQ:2655101040 給予處理,謝謝支持。

相關(guān)文檔推薦

這篇文章主要介紹了PHP正在進(jìn)行時(shí)-變量詳解及字符串動(dòng)態(tài)插入變量的方法,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下
這篇文章主要介紹了PHP正則匹配操作,結(jié)合簡(jiǎn)單實(shí)例形式分析了php中preg_match_all針對(duì)HTML標(biāo)簽中P元素及img src元素內(nèi)容的獲取技巧,需要的朋友可以參考下
這篇文章主要介紹了PHP正則匹配中英文、數(shù)字及下劃線的方法,可用于針對(duì)用戶(hù)名的驗(yàn)證操作,需要的朋友可以參考下
這篇文章主要介紹了PHP正則刪除HTML代碼中寬高樣式的方法,涉及php針對(duì)HTML代碼的正則匹配、替換等操作技巧,需要的朋友可以參考下
這篇文章主要介紹了php正則刪除img標(biāo)簽的方法,結(jié)合具體實(shí)例形式分析了php針對(duì)img標(biāo)簽正則匹配相關(guān)操作技巧,需要的朋友可以參考下
這篇文章主要介紹了PHP正則刪除html代碼中a標(biāo)簽并保留標(biāo)簽內(nèi)容的方法,涉及php基于正則的字符串匹配與子表達(dá)式操作相關(guān)技巧,需要的朋友可以參考下
主站蜘蛛池模板: 精品人伦一区二区三区蜜桃网站 | 蜜桃精品视频在线 | 中文字幕一区二区视频 | 亚洲国产激情 | 男女午夜激情视频 | 亚洲午夜三级 | 免费三级网站 | 日韩最新网址 | 成人黄在线观看 | 久久久精彩视频 | 美女天堂 | 97精品一区二区 | 亚洲精品视 | 亚洲第一在线 | 亚洲一二三在线 | 免费黄视频网站 | 国产成人在线视频播放 | 精品久久久久久亚洲综合网 | 成人小视频在线观看 | 婷婷久久五月天 | 麻豆视频在线免费看 | 黄页网址在线观看 | 嫩草网 | 范冰冰一级做a爰片久久毛片 | 69精品久久久久久 | 日韩久久精品视频 | 国产精品一区在线观看 | 亚洲国产精品久久久久秋霞不卡 | 精品国产一区二区三区观看不卡 | 国产一区二区精品在线观看 | 日韩中文在线观看 | 黄色片在线免费看 | 精品久久久久久久久久 | 久久久久久天堂 | 欧美精品在线一区二区三区 | 欧洲一区二区视频 | 亚洲精品一区二区在线 | 亚洲视频中文字幕 | 在线观看亚洲 | 99成人 | 亚洲一区中文字幕 |