$str="as2223adfsf0s4df0sdfsdf"; echo preg_replace("/0/","",$str); //去掉0字符,此
時(shí)相當(dāng)于 replace的功能, preg_replace
("/0/","A",$str); 這樣就是將0變成A的意思了 echo preg_replace("/[0-9]/","",$str); //去掉所有數(shù)
字 echo preg_replace("/[a-z]/","",$str); //這樣是去掉
所有小寫字母 echo preg_replace("/[A-Z]/","",$str); //這樣是去掉
所有大寫字母 echo preg_replace("/[a-z,A-Z]/","",$str); //這樣是去掉
所有字母 echo preg_replace("/[a-z,A-Z,0-9]/","",$str); //去掉所有字
母和數(shù)字
經(jīng)過以
上的例子,相信大家知道,[ ] 和里面的, 有什么作用了。匹配的字符
串必須加 / / (看例子的第一個(gè)參數(shù))
繼續(xù)深一點(diǎn)的例子:
$str="acsdcs<55555555>sc<6666>sdcd";
echo preg_replace("/<.*>/","",$str); //這個(gè)是表
示去除以<開頭,以>結(jié)尾的那部份,輸出結(jié)果是:acsdcssdcd
注意:上面的 .* 是表示任何字符,也就是說不管<>包住的是什么都去掉
其中. 表示任意字符, * 表示任意個(gè)數(shù)
現(xiàn)在我們來改動(dòng)一下,如果
不想是任何個(gè)數(shù)呢?
$str="acsdcs<55555555>sc<6666>sdcd";
echo preg_replace("/<.{4}>/","",$str); //
此時(shí)輸出: acsdcs<55555555>scsdcd 因?yàn)閧4}指定了條件:<>內(nèi)為4個(gè)字符
的才滿足條件,所以<55555555>不符合條件,沒有被替換。
注意:這時(shí)我們又學(xué)到了一個(gè)知識(shí)點(diǎn){數(shù)字} 表示指定前面的個(gè)數(shù),*就表示是任意個(gè)(0--
無限個(gè))
表示重復(fù)次數(shù)的除了 *, {指定次數(shù)} 表示,還有很多表達(dá)
形式:
$str="acsdcs<55555555>sc<6666>sd<>cd"; echo preg_replace("/<[0-9]*>/","",$str); //輸出
acsdcscd echo "<hr>"; echo preg_replace("/<[0-9]+>/","",$str); //輸入
acsdcsscsd<>cd
上面的例子只要是
為了 表達(dá) * 與+的區(qū)別 , * 表示重復(fù)0數(shù)或n 次,而+ 表示1次以上,即一例中<[0-
9]+ >表示<>里面至少要有一個(gè)數(shù)字才符合條件。
為什么上例中用* 和用+輸出的結(jié)果不同了吧
再來:
$str="acsdcs<55555555>sc<6666>sd<>cd";
echo preg_replace("/<[0-9]?>/","",$str);
//輸出acsdcs<55555555>sc<6666>sdcd
看[0-9]? 這里的?表示
要是0次或1 次,超過1次又不符合條件了。
總結(jié)一下,上面我們學(xué)
會(huì)了 * + ? 和大括號(hào){}表示重復(fù)次數(shù)的方法。
{}表示次數(shù)還可以再
復(fù)雜點(diǎn):
$str="acs<22>dcs<55555>sc<333>sd<4444>cd&quo
t;;
echo preg_replace("/<.{3,5}>/","",$str);
//輸出結(jié)果:acs<22>dcsscsdcd
上式表示只要是3至5次都符合條
件,<22>就不符合條件了,所以沒有被替換
再來
學(xué)多幾個(gè)正則表達(dá)式的元字符:
$str="sfsdf3333sdfsd222fsdf666sdf";
echo preg_replace
("/[0-9]*/","",$str); //去除所有字符
可能每次都用[0-9]表示數(shù)字有點(diǎn)麻煩,所以正則用了個(gè) \d表示數(shù)字。因此上面可
以改成:
echo preg_replace("/
\d*/","",$str);
$str="sfsdf3333s
dfsd222fsd f666sdf";
echo preg_replace("/
\s*/","",$str); //輸出sfsdf3333sdfsd222fsdf666sdf \s 在這里表示空格的意思
還有一些轉(zhuǎn)義字符,大家可以自己試下
:
\w 表示字母或數(shù)字或下劃線或漢字 //這個(gè)容易理解
\b 表示單詞的開頭或結(jié)束 //這個(gè)有點(diǎn)難理解,什么是單詞的開頭?
看例:
$str="applegone
open";
echo preg_replace("/o*/","",$str); //
替換字符的o字符,結(jié)果會(huì)輸出:applegne pen
$str="applegone open";
echo preg_replace("/
\bo*/","",$str); // 這時(shí)是輸出applegone pen ,第一個(gè)o并沒有被替
換,為什么呢? 因?yàn)?\bo 指明了o必須是單詞的開頭才符合條件。
OK,看到這里,明白什么叫單詞的開頭了吧?
繼續(xù)
$str="applegone open go";
echo preg_replace
("/o|g/","",$str); //o|g 中間的|表示或者的意思, 此句的的意
思是替換o或者g
$str="applegone open go";
echo preg_replace("/\bo|o\b/","",$str); //輸出
applegone pen g 因?yàn)樯厦嬲f過了,\b 可以表示單詞的開頭或結(jié)尾,
因此上
例的意思是替換在單詞開頭的o或在單詞結(jié)尾的o
繼續(xù)
^
是表示字符串開頭的意思,$表示字符串的結(jié)尾的意思
$str="applegaone
an apple open go";
echo preg_replace("/
\ba/","",$str); //結(jié)果輸出:pplegaone n pple open go 替換了單詞
的開頭的a
echo preg_replace
("/^a/","",$str); //結(jié)果輸出:pplegaone an apple open go 只
替換了字符串開頭的 a
如果明白了^ , 也會(huì)明白了 $ 的意思了吧?
^ 表示字符串的開頭,$表示字符串的結(jié)尾。
時(shí)候,我們需面對(duì)一種
特殊的情況,請(qǐng)看下例:
$str="a2b333a56b33b";
echo preg_replace("/a.*b/","",$str); //本來是想替換
a2b 和a56b的,但輸出結(jié)果卻是空白
想一下,為什麼上例輸出結(jié)果
是空白呢? 因?yàn)檎麄€(gè)字符串是以a 開頭,以b結(jié)尾。所以把整個(gè)字符串都替換了。
當(dāng)一個(gè)表達(dá)式既符合短字符串的匹配,又符合長字符串的匹配,正則表
達(dá)式在默認(rèn)情況,是匹配最長的那個(gè),這種情況叫做正則表達(dá)式貪婪匹配
即匹配盡量多的字符。
加深一下理解,再試下下面幾個(gè)例:
$str="abb3";
echo preg_replace
("/a.*b/","",$str); //輸出3 , 按照貪婪匹配的原則, a.*b 匹
配的是abb,而不是ab
$str="aabb5"; //嵌套的情況,
echo preg_replace("/a.*b/","",$str); // 輸出5,按照貪
婪匹配的原則, a.*b 匹配的是aabb,而不是中間的ab
可能這時(shí)候你
會(huì)問,如果我真想替換是中間的ab字符,而不想替換aabb呢,那么你又需要學(xué)習(xí):懶惰匹
配
$str="5abb5";
echo preg_replace("/a.*?
b/","",$str); //輸出5b5 , *?表示匹配任意的次,但盡量少, 所以只
替換5abb5中的ab,而不是abb
$str="5a1b22b5";
echo preg_replace("/a.*?b/","",$str); //輸出 522b5 *?
匹配最少的那個(gè) a1b,而不是 a1b22b
注意:懶惰匹配是指嵌套情況下的最少重
復(fù)。
請(qǐng)看下例:
$str="5a1ba22b5";
echo
preg_replace("/a.*?b/","",$str); //輸出結(jié)果是55, a1b 和a22b
并不是嵌套關(guān)系,所以這個(gè)不能用懶惰匹配來解釋,此例可以看作是替換了a1b和a22b。
總結(jié)一下:貪婪匹配匹配盡量多的字符,懶惰匹配匹配盡量
少的字符
懶惰匹配還有其它的表達(dá)方式:
*?
重復(fù)任意次,但盡可能少重復(fù)
+? 重復(fù)1次以上,但盡可能少重復(fù)
重復(fù)0次或1次,但盡量少重復(fù)
{n,m}? 重復(fù)n到m次,但盡量少重復(fù)
{n,}? 重復(fù)n次以上,但盡量少重
懶惰匹配還有個(gè)特殊的
情況:
$str="aabab";
echo preg_replace("/a.*?
b/","",$str); //此時(shí)輸出的結(jié)果是空白
為什么上例中a.*?b
替換了整個(gè)字符串? 其實(shí),并不是因?yàn)樘鎿Q了整個(gè)字符串,而是 替換了aab 和
ab
具體實(shí)例:
去掉所有HTML標(biāo)識(shí)
假
如你有一份HTML
<html>
<head>
<title></title>
</head>
<body>
<font color="#ff0000">PHP正則表達(dá)式
</font>
<a class='a1' href="">Click
Here</a>
</body>
</html>
當(dāng)你用PHP的 file_get_contents 把它全部讀入了 一個(gè)字符串 $str之
后。
如果你只需要這份文件里面的文字,不要其它HTML標(biāo)記。如何
去掉呢?
先分析一下,不管什么HTML標(biāo)記,都有個(gè)特點(diǎn):以<開頭,以>
結(jié)尾,我們只需要去掉以<開頭,以> 結(jié)尾的字符即可
可能你會(huì)想到用以
下的表達(dá)式
$str= preg_replace
("/<.*>/","",$str); // 這樣可不行。為什么?試驗(yàn)一下,
看下例:
$str="111<div>333</div>88";
echo preg_replace("/<.*>/","",$str); //結(jié)果輸出
11188, 它把333也去掉了,我們只想去掉<div></div>標(biāo)記,但根據(jù)貪婪匹配
的原理,這個(gè)表達(dá)式會(huì)去掉:<div>333</div>
那么,我們改為使
用懶惰匹配
$str="111<div>333</div>88";
echo preg_replace("/<.*?>/","",$str); //結(jié)果輸
出:11133388 正是我們想要的結(jié)果
有時(shí)候,HTML標(biāo)記常會(huì)出現(xiàn)嵌套
的現(xiàn)象:
$str="111<div>3<div>444</div>33</div>88"
;;
echo preg_replace("/<.*?>/","",$str); //
結(jié)果輸出:11134443388 也是我們想要的結(jié)果
去掉超級(jí)鏈接
如果我們并不想去掉超級(jí)鏈接,而是想去掉超級(jí)鏈接標(biāo)識(shí)呢?
先分析一下超鏈接標(biāo)識(shí)的特點(diǎn), <a
href="aa.php">Click Herer</a>
還可能有 <a
class="a1" href="aa.php">Click Here</a> 或 <a
class="a1" href="aa.php" target=_blank >Click
Here</a>
還可能有大小寫不同的情況 <A
HREF="aa.php">Click Herer</a>
不管什么情況, 肯定是
<a 開頭 里面含有 href字眼
$str="111<a
href=''></a>88";
echo preg_replace("/<a
href=''>/i","",$str); //這樣輸出的結(jié)果是111</a>88 ,而
沒有去掉</a>
改進(jìn)一下:
$str="111<a
href=''></a>88";
echo preg_replace("/<a
href=''>|<\/a>/i","",$str); // </a>要用
<\/a>表示,加斜杠表轉(zhuǎn)義,否則會(huì)出錯(cuò)的, 加i是為了不區(qū)分大小寫
上
例中輸出了11188 ,是正確去掉超鏈接標(biāo)識(shí)了,但上例的表達(dá)式壯健性太差了,稍有變化
,就會(huì)出錯(cuò)。
稍變一下:
$str="111<a
href=''></a>88"; // 如果href 前面多幾個(gè)空格
echo
preg_replace("/<a
href=''>|<\/a>/i","",$str); //輸出111<a
href=''>88, 這樣就出錯(cuò)了。
因此我們?cè)賹⑵涓倪M(jìn)一下:
$str="111<a href=''></a>88";
echo
preg_replace("/<a
href=''>|<\/a>/i","",$str);
作業(yè)題:
下面是一條壯健性比較好的替換超鏈接代碼的表達(dá)式, 好好分析一下
echo preg_replace("/<a\s+href=[^>]*>|<\/[^a]*a[^>]
*>/i","",$str);
-------------------------
---
PS:上面去掉超鏈接的,只是學(xué)習(xí)作用,在實(shí)際上,用起來,還是不好用,
我再找了兩個(gè),還可以用的
echo preg_replace("/<a
[^>]*?>(.*)<\/a>/si","\\1",$str);
echo
preg_replace("#<a .+>(.*)
<\/a>#iU","\\1",$str);
這兩個(gè),就不
會(huì)出錯(cuò)。
PHP 正則表達(dá)式 | 正則字符 | 正則解釋 |
|---|
| \ | 將下一個(gè)字符標(biāo)記為一個(gè)特殊字符、或一個(gè)原義字符、或一個(gè)向后引用、或一個(gè)八進(jìn)制轉(zhuǎn)義符。例如,“\n”匹配字符“n”?!癨\n”匹配一個(gè)換行符。序列“\\”匹配“\”而“\(”則匹配“(”。 | | ^ | 匹配輸入字符串的開始位置。如果設(shè)置了RegExp對(duì)象的Multiline屬性,^也匹配“\n”或“\r”之后的位置。 | | $ | 匹配輸入字符串的結(jié)束位置。如果設(shè)置了RegExp對(duì)象的Multiline屬性,$也匹配“\n”或“\r”之前的位置。 | | * | 匹配前面的子表達(dá)式零次或多次。例如,zo*能匹配“z”以及“zoo”。*等價(jià)于{0,}。 | | + | 匹配前面的子表達(dá)式一次或多次。例如,“zo+”能匹配“zo”以及“zoo”,但不能匹配“z”。+等價(jià)于{1,}。 | | 匹配前面的子表達(dá)式零次或一次。例如,“do(es)?”可以匹配“does”或“does”中的“do”。?等價(jià)于{0,1}。 | | {n} | n是一個(gè)非負(fù)整數(shù)。匹配確定的n次。例如,“o{2}”不能匹配“Bob”中的“o”,但是能匹配“food”中的兩個(gè)o。 | | {n,} | n是一個(gè)非負(fù)整數(shù)。至少匹配n次。例如,“o{2,}”不能匹配“Bob”中的“o”,但能匹配“foooood”中的所有o?!皁{1,}”等價(jià)于“o+”?!皁{0,}”則等價(jià)于“o*”。 | | {n,m} | m和n均為非負(fù)整數(shù),其中n<=m。最少匹配n次且最多匹配m次。例如,“o{1,3}”將匹配“fooooood”中的前三個(gè)o?!皁{0,1}”等價(jià)于“o?”。請(qǐng)注意在逗號(hào)和兩個(gè)數(shù)之間不能有空格。 | | 當(dāng)該字符緊跟在任何一個(gè)其他限制符(*,+,?,{n},{n,},{n,m})后面時(shí),匹配模式是非貪婪的。非貪婪模式盡可能少的匹配所搜索的字符串,而默認(rèn)的貪婪模式則盡可能多的匹配所搜索的字符串。例如,對(duì)于字符串“oooo”,“o?”將匹配單個(gè)“o”,而“o+”將匹配所有“o”。 | | .點(diǎn) | 匹配除“\n”之外的任何單個(gè)字符。要匹配包括“\n”在內(nèi)的任何字符,請(qǐng)使用像“[\s\S]”的模式。 | | (pattern) | 匹配pattern并獲取這一匹配。所獲取的匹配可以從產(chǎn)生的Matches集合得到,在VBScript中使用SubMatches集合,在JScript中則使用$0…$9屬性。要匹配圓括號(hào)字符,請(qǐng)使用“\(”或“\)”。 | | (?:pattern) | 匹配pattern但不獲取匹配結(jié)果,也就是說這是一個(gè)非獲取匹配,不進(jìn)行存儲(chǔ)供以后使用。這在使用或字符“(|)”來組合一個(gè)模式的各個(gè)部分是很有用。例如“industr(?:y|ies)”就是一個(gè)比“industry|industries”更簡略的表達(dá)式。 | | (?=pattern) | 正向肯定預(yù)查,在任何匹配pattern的字符串開始處匹配查找字符串。這是一個(gè)非獲取匹配,也就是說,該匹配不需要獲取供以后使用。例如,“Windows(?=95|98|NT|2000)”能匹配“Windows2000”中的“Windows”,但不能匹配“Windows3.1”中的“Windows”。預(yù)查不消耗字符,也就是說,在一個(gè)匹配發(fā)生后,在最后一次匹配之后立即開始下一次匹配的搜索,而不是從包含預(yù)查的字符之后開始。 | | (?!pattern) | 正向否定預(yù)查,在任何不匹配pattern的字符串開始處匹配查找字符串。這是一個(gè)非獲取匹配,也就是說,該匹配不需要獲取供以后使用。例如“Windows(?!95|98|NT|2000)”能匹配“Windows3.1”中的“Windows”,但不能匹配“Windows2000”中的“Windows”。 | | (?<=pattern) | 反向肯定預(yù)查,與正向肯定預(yù)查類似,只是方向相反。例如,“(?<=95|98|NT|2000)Windows”能匹配“2000Windows”中的“Windows”,但不能匹配“3.1Windows”中的“Windows”。 | | (?<!pattern) | 反向否定預(yù)查,與正向否定預(yù)查類似,只是方向相反。例如“(?<!95|98|NT|2000)Windows”能匹配“3.1Windows”中的“Windows”,但不能匹配“2000Windows”中的“Windows”。 | | x|y | 匹配x或y。例如,“z|food”能匹配“z”或“food”?!?z|f)ood”則匹配“zood”或“food”。 | | [xyz] | 字符集合。匹配所包含的任意一個(gè)字符。例如,“[abc]”可以匹配“plain”中的“a”。 | | [^xyz] | 負(fù)值字符集合。匹配未包含的任意字符。例如,“[^abc]”可以匹配“plain”中的“plin”。 | | [a-z] | 字符范圍。匹配指定范圍內(nèi)的任意字符。例如,“[a-z]”可以匹配“a”到“z”范圍內(nèi)的任意小寫字母字符。注意:只有連字符在字符組內(nèi)部時(shí),并且出兩個(gè)字符之間時(shí),才能表示字符的范圍; 如果出字符組的開頭,則只能表示連字符本身. | | [^a-z] | 負(fù)值字符范圍。匹配任何不在指定范圍內(nèi)的任意字符。例如,“[^a-z]”可以匹配任何不在“a”到“z”范圍內(nèi)的任意字符。 | | \b | 匹配一個(gè)單詞邊界,也就是指單詞和空格間的位置。例如,“er\b”可以匹配“never”中的“er”,但不能匹配“verb”中的“er”。 | | \B | 匹配非單詞邊界?!癳r\B”能匹配“verb”中的“er”,但不能匹配“never”中的“er”。 | | \cx | 匹配由x指明的控制字符。例如,\cM匹配一個(gè)Control-M或回車符。x的值必須為A-Z或a-z之一。否則,將c視為一個(gè)原義的“c”字符。 | | \d | 匹配一個(gè)數(shù)字字符。等價(jià)于[0-9]。 | | \D | 匹配一個(gè)非數(shù)字字符。等價(jià)于[^0-9]。 | | \f | 匹配一個(gè)換頁符。等價(jià)于\x0c和\cL。 | | \n | 匹配一個(gè)換行符。等價(jià)于\x0a和\cJ。 | | \r | 匹配一個(gè)回車符。等價(jià)于\x0d和\cM。 | | \s | 匹配任何空白字符,包括 空格、換行符、制表符、換頁符、中文全角空格等等。等價(jià)于[ \f\r\n\t\v]。 | | \S | 匹配任何非空白字符。等價(jià)于[^ \f\r\n\t\v]。 | | \t | 匹配一個(gè)制表符。等價(jià)于\x09和\cI。 | | \v | 匹配一個(gè)垂直制表符。等價(jià)于\x0b和\cK。 | | \w | 匹配包括下劃線的任何單詞字符。等價(jià)于“[A-Za-z0-9_]”。 | | \W | 匹配任何非單詞字符。等價(jià)于“[^A-Za-z0-9_]”。 | | \xn | 匹配n,其中n為十六進(jìn)制轉(zhuǎn)義值。十六進(jìn)制轉(zhuǎn)義值必須為確定的兩個(gè)數(shù)字長。例如,“\x41”匹配“A”?!癨x041”則等價(jià)于“\x04&1”。正則表達(dá)式中可以使用ASCII編碼。 | | \num | 匹配num,其中num是一個(gè)正整數(shù)。對(duì)所獲取的匹配的引用。例如,“(.)\1”匹配兩個(gè)連續(xù)的相同字符。 | | \n | 標(biāo)識(shí)一個(gè)八進(jìn)制轉(zhuǎn)義值或一個(gè)向后引用。如果\n之前至少n個(gè)獲取的子表達(dá)式,則n為向后引用。否則,如果n為八進(jìn)制數(shù)字(0-7),則n為一個(gè)八進(jìn)制轉(zhuǎn)義值。 | | \nm | 標(biāo)識(shí)一個(gè)八進(jìn)制轉(zhuǎn)義值或一個(gè)向后引用。如果\nm之前至少有nm個(gè)獲得子表達(dá)式,則nm為向后引用。如果\nm之前至少有n個(gè)獲取,則n為一個(gè)后跟文字m的向后引用。如果前面的條件都不滿足,若n和m均為八進(jìn)制數(shù)字(0-7),則\nm將匹配八進(jìn)制轉(zhuǎn)義值nm。 | | \nml | 如果n為八進(jìn)制數(shù)字(0-7),且m和l均為八進(jìn)制數(shù)字(0-7),則匹配八進(jìn)制轉(zhuǎn)義值nml。 | | \un | 匹配n,其中n是一個(gè)用四個(gè)十六進(jìn)制數(shù)字表示的Unicode字符。例如,\u00A9匹配版權(quán)符號(hào)(?)。 |
上表是正則表達(dá)式比較全面的解釋,而商標(biāo)中的正則字符都有特殊含義,已經(jīng)不再代表原字符含義。如正則表達(dá)式中“+”不代表加號(hào),而是代表匹配一次或多次。而如果想要讓“+”表示加號(hào),則需要在其前面加上“\”轉(zhuǎn)義,也就是用“\+”表示加號(hào)。 三個(gè)常用的知識(shí)點(diǎn): 1.惰性匹配:正則引擎默認(rèn)是貪婪的,若要最少重復(fù)的話,需要用到惰性匹配符 “” 懶惰限定符 代碼/語法 | 說明 | | *? | 重復(fù)任意次,但盡可能少重復(fù) | | +? | 重復(fù)1次或更多次,但盡可能少重復(fù) | | 重復(fù)0次或1次,但盡可能少重復(fù) | | {n,m}? | 重復(fù)n到m次,但盡可能少重復(fù) | | {n,}? | 重復(fù)n次以上,但盡可能少重復(fù) |
參考:http:///tutorials/regex/regex.htm#greedyandlazy 2.不捕獲性匹配: 一方面不占用反向應(yīng)用組號(hào),另一方面提高了匹配效率 (?:exp) // 匹配exp,不捕獲匹配的文本,也不給此分組分配組號(hào) 參考:http:///tutorials/regex/regex.htm#backreference 3.PHP正則表達(dá)式模式修飾符詳解 | 模式修正符號(hào) | 功能描述 |
|---|
| i | 在和正則匹配是不區(qū)分大小寫 | | m | 將字符串視為多行。默認(rèn)的正則開始“^”和結(jié)束“$”將目標(biāo)字條串作為一單一的一“行”字符(甚至其中包括換行符也是如此)。如果在修飾符中加上“m”,那么開始和結(jié)束將會(huì)指點(diǎn)字符串的每一行的開頭就是“^”結(jié)束就是“$”。 | | s | 如果設(shè)定了這個(gè)修正符,那么,被匹配的字符串將視為一行來看,包括換行符,換行符將被視為普通字符串。 | | x | 忽略空白,除非進(jìn)行轉(zhuǎn)義的不被忽略。 | | e | 只用在preg_replace()函數(shù)中,在替換字符串中逆向引用做正常的替換,將其(即“替換字符串”)作為PHP代碼求值,并用其結(jié)果來替換所搜索的字符串。 | | A | 如果使用這個(gè)修飾符,那么表達(dá)式必須是匹配的字符串中的開頭部分。比如說”/a/A”匹配”abcd”。 | | D | 模式中的$字符權(quán)匹配目標(biāo)字符的結(jié)尾。沒有此選項(xiàng)時(shí),如果最后一個(gè)字符是換行符的話,美元符號(hào)也會(huì)匹配此字符之前。如果設(shè)定了修正符m則忽略此項(xiàng)。 | | E | 與”m”相反,如果使用這個(gè)修飾符,那么”$”將匹配絕對(duì)字符串的結(jié)尾,而不是換行符前面,默認(rèn)就打開了這個(gè)模式。 | | U | 貪婪模式,和問號(hào)的作用差不多,最大限度的匹配就是貪婪模式。 |
常用的元字符| 代碼 | 說明 |
|---|
| . | 匹配除換行符(\r\n,\r,\n)以外的任意字符 | | \w | 匹配字母或數(shù)字或下劃線或漢字 | | \s | 匹配任意的空白符,包括空格、制表符(Tab)、換行符、中文全角空格等 | | \d | 匹配數(shù)字 | | \b | 匹配單詞的開始或結(jié)束 | | ^ | 匹配字符串的開始 | | $ | 匹配字符串的結(jié)束 |
|