亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > Regex > 正文

正則表達式的高級技巧分享

2020-03-22 19:11:58
字體:
來源:轉載
供稿:網友
html' target='_blank'>正則表達式(regular expression abbr. regex) 功能強大,能夠用于在一大串字符里找到所需信息。它利用約定俗成的字符結構表達式來發生作用。不幸的是,簡單的正則表達式對于一些高級運用,功能遠遠不夠。若要進行篩選的結構比較復雜,你可能就需要用到高級正則表達式。

本文介紹正則表達式的高級技巧。篩選出了八個常用的概念,并配上實例解析,每個例子都是滿足某種復雜要求的簡單寫法。如果你對正則的基本概念尚缺乏了解,請先閱讀這篇文章,或者這個教程,或者維基條目。

這里的正則語法適用于php,與perl兼容。



1. 貪婪/懶惰


所有能多次限定的正則運算符都是貪婪的。他們盡可能多地匹配目標字符串,也就是說匹配結果會盡可能地長。不幸的是,這種做法并不總是我們想要的。因此,我們添加“懶惰”限定符來解決問題。在各個貪婪運算符后添加“?”能讓表達式只匹配盡可能短的長度。另外,修改器“u”也能惰化能多次限定的運算符。理解貪婪與懶惰的區別是運用高級正則表達式的基礎。

貪婪操作符
操作符 匹配之前的表達式零次或零次以上。它是一個貪婪操作符。請看下面的例子:

復制代碼 代碼如下:
preg_match( ' / h1 . /h1 /' ' h1 這是一個標題。 /h1
h1 這是另一個。 /h1 ' $matches )

句點(.)能代表除換行符外的任意字符。上面的正則表達式匹配 h1 標簽以及標簽內的所有內容。它用句點(.)和星號()來匹配標簽內的所有內容。匹配結果如下:

1. h1 這是一個標題。 /h1 h1 這是另一個。 /h1
整個字串都被返回。 操作符會連續匹配所有內容—— 甚至包括中間的 h1 閉合標簽。因為它是貪婪的,匹配整個字串是符合其利益最大化原則。

懶惰操作符
把上面的式子稍作修改,加上一個問號(?),能讓表達式變懶惰:

1./ h1 .? /h1 /
這樣它會覺得,只需匹配到第一個 h1 結尾標簽就完成任務了。

另一個有著類似屬性的貪婪操作符是 {n } 。它代表之前的匹配模式重復n次或n次以上,如果沒有加上問號,它會尋找盡可能多的重復次數,加上的話,則會盡可能少重復(當然也就是“重復n次”最少)。


復制代碼 代碼如下:
# 建立字串
$str = ' hihihi oops hi'
# 使用貪婪的{n }操作符進行匹配
preg_match( ' /(hi){2 }/' $str $matches ) # matches[0] 將是 ' hihihi'
# 使用墮化了的 {n }? 操作符匹配
preg_match( ' /(hi){2 }?/' $str $matches ) # matches[0] 將是 ' hihi'

2. 回返引用(back referencing)

有什么用?
回返引用(back referencing)一般被翻譯成“反向引用”、“后向引用”、“向后引用”,個人覺得“回返引用”更為貼切[笨活兒]。它是在正則表達式內部引用之前捕獲到的內容的方法。例如,下面這個簡單例子的目的是匹配出引號內部的內容:

復制代碼 代碼如下:
# 建立匹配數組
$matches = array()

# 建立字串
$str = " " this is a ' string' " "

# 用正則表達式捕捉內容
preg_match( " /(" |' ).?(" |' )/" $str $matches )

# 輸出整個匹配字串
echo $matches[0]

它會輸出:



1." this is a'
顯然,這并不是我們想要的內容。

這個表達式從開頭的雙引號開始匹配,遭遇單引號之后就錯誤地結束了匹配。這是因為表達式里說:(”|'),也就是雙引號(”)和單引號(')均可。要修正這個問題,你可以用到回返引用。表達式1 2 … 9 是對前面已捕獲到的各個子內容的編組序號,能作為對這些編組的“指針”而被引用。在此例中,第一個被匹配的引號就由 1 代表。

如何運用?
將上面的例子中,后面的閉合引號替換為1:

1.preg_match( ' /(" |' ).?1/' $str $matches )
這會正確地返回字串:

1." this is a ' string' "
譯注思考題:

如果是中文引號,前引號和后引號不是同一個字符,怎么辦?

還記得php函數 preg_replace 嗎?其中也有回返引用。只不過我們沒有用 1 … 9,而是用了 $1 … $9 … $n (此處任意數目均可)作為回返指針。例如,如果你想把所有的段落標簽 p 都替換成文本:

復制代碼 代碼如下:
$text = preg_replace( ' / p (.?) /p /'
" & lt p& gt $1& lt /p& gt " $html )

參數$1是一個回調引用,代表段落標簽 p 內部的文字,并插入到替換后的文本里。這種簡便易用的表達式寫法為我們提供了一個獲取已匹配文字的簡單方法,甚至在替換文本時也能使用。

3. 已命名捕獲組(named groups)
當在一個表達式內多次用到回調引用時,很容易就把事情搞混淆,要弄清那些數字(1 … 9)都代表哪一個子內容是件很麻煩的事?;卣{引用的一個替代方法是使用帶名字的捕獲組(下文簡稱“有名組”)。有名組使用(?p name pattern)來設定,name代表組名,pattern是配合該有名組的正則結構。請看下面的例子:

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
www.美女亚洲精品| 国产在线视频91| 91精品国产91久久久久久吃药| 国产精品∨欧美精品v日韩精品| 中文字幕亚洲欧美日韩在线不卡| 91探花福利精品国产自产在线| 日韩第一页在线| 亚洲国产另类 国产精品国产免费| 久久亚洲精品小早川怜子66| 欧美日韩免费区域视频在线观看| 欧美激情国产精品| 最近2019中文字幕第三页视频| 4p变态网欧美系列| 成人国产精品色哟哟| 78色国产精品| 国产精品人人做人人爽| 成人有码在线播放| 欧美精品在线免费| 欧美精品videosex性欧美| 国产在线久久久| 亚洲欧美999| 国产精品1234| 国产亚洲精品一区二区| 精品亚洲国产视频| 日韩成人免费视频| 91亚洲精品在线| 一区二区三区视频免费在线观看| 国产精品毛片a∨一区二区三区|国| www.欧美视频| 97视频在线观看免费高清完整版在线观看| www国产亚洲精品久久网站| 日韩精品极品在线观看播放免费视频| 尤物99国产成人精品视频| 国产精品久久一区主播| 国产精品久久久久高潮| 国产69精品99久久久久久宅男| 国产精品成人一区二区| 日韩有码在线观看| 亚洲精品日韩丝袜精品| 国产精品男人爽免费视频1| 国产亚洲人成网站在线观看| 精品视频在线播放色网色视频| 大胆欧美人体视频| 91免费在线视频网站| 欧美乱妇40p| 亚洲美女喷白浆| 欧美一级电影免费在线观看| 欧美一级黑人aaaaaaa做受| 亚洲成人av资源网| 欧美电影在线免费观看网站| 成人性生交大片免费观看嘿嘿视频| 国产91精品最新在线播放| 欧美片一区二区三区| 亚洲最大成人免费视频| 欧美老肥婆性猛交视频| 亚洲qvod图片区电影| 九九热r在线视频精品| 欧美精品少妇videofree| 久久高清视频免费| 久久免费视频在线| 亚洲专区中文字幕| 91在线观看免费高清完整版在线观看| 亚洲国产精品久久久久秋霞不卡| 国产精品久久久久不卡| 国产精品激情av在线播放| 亚洲人成网站777色婷婷| xxxxxxxxx欧美| 精品日韩中文字幕| 欧美午夜美女看片| 亚洲欧美www| 一区二区三区回区在观看免费视频| 欧美大学生性色视频| 91综合免费在线| 欧美日韩美女在线观看| 亚洲性生活视频在线观看| 91久久精品一区| 久久成人18免费网站| 国产美女搞久久| 456亚洲影院| 日韩精品极品毛片系列视频| 久久激情视频久久| 午夜精品久久久久久久99热浪潮| 国产成人精品一区| 日韩av三级在线观看| 国产亚洲精品美女| 欧美午夜宅男影院在线观看| 国产精品丝袜白浆摸在线| 一区二区三欧美| 中文字幕亚洲欧美日韩在线不卡| 精品国产一区二区在线| 91在线高清免费观看| 久久精品一偷一偷国产| 精品久久久在线观看| 亚洲大胆人体视频| 久久亚洲精品一区| 日本亚洲欧洲色α| 国产精品成熟老女人| 日韩亚洲成人av在线| 精品香蕉一区二区三区| 久久精品视频在线观看| 国产精品久久久久久久久久久新郎| 国产精品成人久久久久| 国产成人精品免费久久久久| 日韩av免费在线| 热久久免费视频精品| 成人免费视频在线观看超级碰| 91精品国产乱码久久久久久久久| 中文字幕精品一区二区精品| 久久精品国产v日韩v亚洲| 91精品久久久久久久久久久| 亚洲成人免费网站| 国产精品久久久久久中文字| 中国人与牲禽动交精品| 91九色综合久久| 欧美洲成人男女午夜视频| 日韩有码视频在线| 尤物九九久久国产精品的分类| 亚洲天堂第一页| 免费av一区二区| 亚洲福利视频网| 国产精品丝袜高跟| 黑人与娇小精品av专区| 亚洲乱码一区av黑人高潮| 日本精品久久久久影院| 日韩欧美一区视频| 中文字幕一区日韩电影| 欧美激情视频网址| 国产精品免费久久久久影院| 国产精品三级美女白浆呻吟| 欧美国产高跟鞋裸体秀xxxhd| 欧美日韩在线看| 久久亚洲精品小早川怜子66| 国产日韩在线一区| 亚洲999一在线观看www| 国产女人18毛片水18精品| 亚洲a成v人在线观看| 中文字幕欧美精品在线| 日韩有码视频在线| 欧美日韩中文字幕综合视频| 亚洲aⅴ男人的天堂在线观看| 日韩成人在线视频观看| 中文字幕在线成人| 91亚洲精品一区| 国产精品视频xxxx| 精品国产91久久久久久老师| 欧美日韩国产中文字幕| 2018国产精品视频| 中文字幕久久精品| 秋霞av国产精品一区| 成人妇女免费播放久久久| 国产精品久久久999| 免费97视频在线精品国自产拍| 国产欧美日韩丝袜精品一区| 欧美日韩福利视频| 亚洲福利视频网| 欧美一级淫片丝袜脚交| 亚洲国产一区自拍| 欧美午夜精品久久久久久浪潮| 91色中文字幕| 精品成人av一区| 91精品国产成人www| 精品日本高清在线播放| 51午夜精品视频| 国产一区二区三区丝袜|