正则在php中的使用
一、基礎(chǔ)
a)常用元字符
| 代碼 | 說明 |
| . | 匹配除了換行符意外的任意字符 |
| \w | 字母|數(shù)字|下劃線|漢字 |
| \s | 匹配任意的空白符 |
| \d | 匹配數(shù)字 |
| \b | 匹配單詞的開始或者結(jié)束 |
| ^ | 匹配字符串的開始 |
| $ | 匹配字符串的結(jié)束 |
?
b)常用限定符
| * | 重復(fù)零次或更多次 |
| + | 重復(fù)一次或更多次 |
| ? | 重復(fù)一次或零次 |
| {n} | 重復(fù)n次 |
| {n,} | 重復(fù)n次或更多次 |
| {n,m} | 重復(fù)n到m次 |
?
我們也可以輕松地指定一個(gè)字符范圍,像[0-9]代表的含意與\d就是完全一致的:一位數(shù)字;同理[a-z0-9A-Z_]也完全等同于\w(如果只考慮英文的話)。
c)分支條件
正則表達(dá)式里的分枝條件指的是有幾種規(guī)則,如果滿足其中任意一種規(guī)則都應(yīng)該當(dāng)成匹配,具體方法是用|把不同的規(guī)則分隔開。
0\d{2}-\d{8}|0\d{3}-\d{7}
d)子表達(dá)式
可以用小括號(hào)來指定子表達(dá)式(也叫做分組),子表達(dá)式的內(nèi)容會(huì)被捕獲,再次使用就方便了。
e)反義
有時(shí)需要查找不屬于某個(gè)能簡單定義的字符類的字符。比如想查找除了數(shù)字以外,其它任意字符都行的情況,這時(shí)需要用到反義:
| \W | 匹配不是數(shù)字字母下劃線或漢字的字符 |
| \S | 任意不是空白符的字符 |
| \D | 任意非數(shù)字字符 |
| \B | 不是以單詞開頭的位置 |
| [^x] | 除了x意外的任意字符 |
| [^aeiou] | aeiou以外的字符 |
?
f)反向引用
使用小括號(hào)指定一個(gè)子表達(dá)式后,匹配這個(gè)子表達(dá)式的文本(也就是此分組捕獲的內(nèi)容)可以在表達(dá)式或其它程序中作進(jìn)一步的處理。默認(rèn)情況下,每個(gè)分組會(huì)自動(dòng)擁有一個(gè)組號(hào),規(guī)則是:從左向右,以分組的左括號(hào)為標(biāo)志,第一個(gè)出現(xiàn)的分組的組號(hào)為1,第二個(gè)為2,以此類推。
g)貪婪與懶惰
當(dāng)正則表達(dá)式中包含能接受重復(fù)的限定符時(shí),通常的行為是(在使整個(gè)表達(dá)式能得到匹配的前提下)匹配盡可能多的字符。以這個(gè)表達(dá)式為例:a.*b,它將會(huì)匹配最長的以a開始,以b結(jié)束的字符串。如果用它來搜索aabab的話,它會(huì)匹配整個(gè)字符串a(chǎn)abab。這被稱為貪婪匹配。
有時(shí),我們更需要懶惰匹配,也就是匹配盡可能少的字符。前面給出的限定符都可以被轉(zhuǎn)化為懶惰匹配模式,只要在它后面加上一個(gè)問號(hào)?。這樣.*?就意味著匹配任意數(shù)量的重復(fù),但是在能使整個(gè)匹配成功的前提下使用最少的重復(fù)。
a.*?b匹配最短的,以a開始,以b結(jié)束的字符串。如果把它應(yīng)用于aabab的話,它會(huì)匹配aab(第一到第三個(gè)字符)和ab(第四到第五個(gè)字符)。
| *? | 重復(fù)任意次,但盡可能少重復(fù) |
| +? | 重復(fù)1次或更多次,但盡可能少重復(fù) |
| ?? | 重復(fù)1次或0次,但盡可能少重復(fù) |
| {n,m}? | 重復(fù)n到m次,但盡可能少重復(fù) |
| {n,}? | 重復(fù)n次以上,但盡可能少重復(fù) |
?
內(nèi)容參考自:http://www.92csz.com/regex/
?
二、php中使用正則
a)匹配
$pattern = "/<div>.*div>/i"; $subject = "<div>abc</div><b>d</b><div></div>"; preg_match_all($pattern, $subject, $matchs); echo htmlentities($matchs[0][0]);輸出:<div>abc</div><b>d</b><div></div>(貪婪)
$pattern = "/<div>.*?div>/i"; preg_match_all($pattern, $subject, $matchs); echo '<br />'; echo htmlentities($matchs[0][0]);輸出:<div>abc</div>(懶惰)
b)替換
$string = 'The quick brown fox jumped over the lazy dog.'; echo $string . '<br>'; $patterns = array('/quick/', '/brown/', '/fox/'); $replacements = array('slow', 'black', 'bear'); echo preg_replace($patterns, $replacements, $string);輸出:
The quick brown fox jumped over the lazy dog.
The slow black bear jumped over the lazy dog.
?
$string = "hello 100"; $pattern = "/(\w+) (\d+)/i"; $replacement = "$1,$2"; echo preg_replace($pattern, $replacement, $string);輸出:hello,100
轉(zhuǎn)載于:https://www.cnblogs.com/hwt987/p/3780098.html
總結(jié)
以上是生活随笔為你收集整理的正则在php中的使用的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 哪种代理适合用于Web数据采集
- 下一篇: Apache以及PHP的默认编码问题解决