- 論壇徽章:
- 0
|
最近一直在做審計(jì)郵件、帖子的工作,所以得首先學(xué)會(huì)正則。雖說(shuō)網(wǎng)上對(duì)正則表達(dá)式解釋的已經(jīng)夠詳盡的了, 但是把網(wǎng)上的試子照搬到php中,還是有一些惹人厭的問(wèn)題:
譬如在
正則表達(dá)式30分鐘入門教程
中有個(gè)這樣的式子(?).*(?=)用于匹配不包含屬性的簡(jiǎn)單HTML標(biāo)簽內(nèi)里的內(nèi)容,按道理來(lái)說(shuō)直接在preg_match中運(yùn)用應(yīng)該沒什么問(wèn)題,可實(shí)際呢:
$str = "aaaaaabbbbbbcccccccddddddfffff";
preg_match("/(?).*(?=)/s", $str, $matches);
var_dump($matches);
結(jié)果報(bào)錯(cuò):
Warning: preg_match(): Compilation failed: lookbehind assertion is not fixed length at offset 11...于是把\w+直接寫成font:
preg_match("/(?).*(?=)/s", $str, $matches);
YYD,結(jié)果盡然為空,這個(gè)問(wèn)題困擾了我好久,瞎貓碰死耗子,將\1無(wú)名組換成有名組盡然成了:
preg_match("/(?font)>).*(?=)/s", $str, $matches);
終于成功了,但是那些失敗的例子都在正則的
測(cè)試工具
里試過(guò)了,不知道為什么...
下面舉幾個(gè)經(jīng)典正則的小例子:
\b((?!abc)\w)+\b , 匹配不包含連續(xù)字符串a(chǎn)bc的單詞,對(duì)于字符串"asdf abcaa abcbb abab", 它會(huì)取出asdf 和 abab。((?!).|(?R))* 遞歸匹配,給出上面的字符串a(chǎn)aaaaabbbbbbcccccccddddddfffff,其會(huì)從中引出兩組:0組,aaaaaabbbbbbcccccccdddddd 1組,dddddd。其它的以后再寫。
給出幾其他人的好文章:
C#基礎(chǔ)回顧:正則表達(dá)式
正則表達(dá)式30分鐘入門教程
正則表達(dá)式高級(jí)技巧背后的關(guān)鍵概念
表達(dá)式的遞歸匹配
遞歸深度匹配 正則表達(dá)式
本文來(lái)自ChinaUnix博客,如果查看原文請(qǐng)點(diǎn):http://blog.chinaunix.net/u1/54338/showart_1995965.html |
|