成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

全面分析Linux正則表達式(三)

運維 系統運維
Linux正則表達式中一些較高級的正則表達式特性將在這篇文章里介紹,先介紹子模式(subpatterns)與逆向引用(Back references),后面部分我將會在后面繼續。

Linux正則表達式的模式修正符與元字符在前面兩篇我們已經介紹了,因為網上現有的正則表達式資料都對這部分都有詳細的介紹和眾多的例子,如果覺得對前一部分缺乏了解可以參看這些資料。本文希望可以盡可能多涉及一些較高級的正則表達式特性。
在本文里,我們主要介紹Linux正則表達式的子模式(subpatterns),逆向引用(Back references)和量詞(quantifiers),其中重點介紹對這些概念的一些擴展應用,例如子模式中的非捕獲子模式,量詞匹配時的greedy與ungreedy。

子模式(subpatterns)與逆向引用(Back references)

正則表達式可以包含多個字模式,子模式由圓括號定界,可以嵌套。這也是兩個元字符“(”和“)”的作用。子模式可以有以下作用:
1. 將多選一的分支局部化。
例如,模式: cat(aract|erpillar|)匹配了 "cat","cataract" 或 "caterpillar" 之一,沒有圓括號的話將匹配 "cataract","erpillar" 或空字符串。
2. 將子模式設定為捕獲子模式(例如上面這個例子)。當整個模式匹配時,目標字符串中匹配了子模式的部分可以通過逆向引用進行調用。左圓括號從左到右計數(從 1 開始)以取得捕獲子模式的數。
注意,子模式是可以嵌套的,例如,如果將字符串 "the red king" 來和模式 /the ((red|white) (king|queen))/進行匹配,捕獲的子串為 "red king","red" 以及 "king",并被計為 1,2 和 3 ,可以通過“1”,“2”,“3”來分別引用它們,“1”包含了“2”和“3”,它們的序號是由左括號的順序決定的。
在一些老的linux/unux工具里,子模式使用的圓括號需要用反斜線轉義,向這種(subpattern),但現代的工具已經不需要了,本文中使用的例子都不進行轉義。
非捕獲子模式(non-capturing subpatterns)
用一對括號同時完成上面提到的子模式的兩個功能有時會出現一些問題,例如,由于逆向引用的數目是有限的(通常***不超過9),而且經常會遇到無需捕獲的子模式定義。這時,可以在開始的括號后加上問號和冒號來表示這個子模式無需捕獲,就向下面這樣:((?:red|white) (king|queen))。
如果將“the white queen”作為模式匹配的目標字符串,則捕獲的字串有“white queen”和“queen”,分別作為“1”和“2”,white雖然符合子模式“(?:red|white)”,但并不被捕獲。
我們前面已經介紹過用括號與問號表示模式修正符的方法,為方便起見,如果需要在非捕獲子模式中插入模式修正符,可以把它直接放在問號和冒號之間,例如,下面兩個模式是等效的。
/(?i:saturday|sunday)/和/(?:(?i)saturday|sunday)/。

逆向引用(Back references)

前面介紹反斜線作用時,已經提到它的一個作用就是表示逆向引用,當字符類之外的反斜線后跟一個大于0的十進制數時,它很有可能是一個逆向引用。它的含義正如它的名稱如言,它表示對它出現之前已經捕獲的子模式的引用。這個數字代表了它引用的左括號在模式中出現的次序,我們在介紹子模式時已經看到過逆向引用的一個例子,那里的過“1”,“2”,“3”分別表示所捕獲的***,第二,和第三個小括號定義的子模式的內容。
值得注意的是,當反斜線后的數字小于10時,可以確定此為一個逆向引用,這樣,這個逆向引用就可以出現在之前有相應數目的左圓括號被捕獲前而不會出現混淆,只有整個模式能提供那么多的捕獲子模式,就不會報錯。說起來似乎很混亂,還是讓我們來看下面這個例子。把介紹子模子時舉的例子拿來修改一下,前面講過字符串 "the red king" 來和模式 /the ((red|white) (king|queen))/匹配,捕獲的子串為 "red king","red" 以及 "king",并被計為 1,2 和 3 ,現在把字符串,修改為" king,the red king",模式改為/3,the ((red|white) (king|queen))/,這個模式應該也是可以匹配的。不過,并非所有的正則表達式工具都支持這種用法,安全的做法是在相應序號的左括號之后使用與之相關的逆向引用。
需要注意的另一點是逆向引用的值是在目標字符串中實際捕獲的符合子模式的字符串片段而非該子模式本本身。例如/ (sens|respons)e and 1ibility/會匹配“sense and sensibility” 和 “response and responsibility”,但不會是 "sense and responsibility"。當被逆向引用的子模式后面有量詞從而被重復匹配了多次,逆向引用的值會以***一次匹配的值為準。例如/([abc]){3}/匹配字符串“abc”時,逆向引用“1”的值將是***一次匹配的結果“c”。

相信這里大家對Linux正則表達式的子模式(subpatterns)與逆向引用(Back references)已經有所了解了,后面還有更精彩內容。

【編輯推薦】

  1. 全面分析Linux正則表達式(二)
  2. 全面分析Linux正則表達式(一)
  3. 詳細介紹Linux虛擬機的安裝方法
  4. 詳解Linux init進程及相關文件
  5. 詳細剖析Linux服務器安全防護十個方面
責任編輯:小霞 來源: 中國網管聯盟
相關推薦

2010-03-03 12:58:41

Linux正則表達式

2010-03-03 13:09:10

Linux正則表達式

2010-03-03 11:03:51

Linux正則表達式

2010-03-03 13:31:25

Linux正則表達式

2010-03-03 10:51:32

正則表達式

2017-05-12 10:47:45

Linux正則表達式程序基礎

2010-07-14 09:47:04

Perl正則表達式

2022-01-04 11:35:03

Linux Shel正則表達式Linux

2010-07-13 16:56:30

Perl正則表達式

2020-09-04 09:16:04

Python正則表達式虛擬機

2018-09-27 15:25:08

正則表達式前端

2024-09-14 09:18:14

Python正則表達式

2022-03-28 06:19:14

正則表達式開發

2009-02-18 09:48:20

正則表達式Java教程

2019-07-17 15:45:47

正則表達式字符串前端

2021-01-27 11:34:19

Python正則表達式字符串

2009-09-16 18:19:34

正則表達式組

2011-06-02 12:34:16

正則表達式

2010-03-25 18:25:36

Python正則表達式

2016-11-10 16:21:22

Java 正則表達式
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 亚洲国产情侣 | 久久国产精品偷 | h片在线观看网站 | 亚洲美女一区 | 在线国产一区 | 日韩精品| 黄色网址免费看 | 久久综合激情 | 日韩三区 | 欧美一区二区三区四区视频 | 国产一区久久久 | 成人国产一区二区三区精品麻豆 | 久久里面有精品 | 欧美男人天堂 | 在线视频h | www.精品国产| 久久99久久99 | 91精品国产综合久久精品图片 | 久久精品国产一区二区电影 | 亚洲精品在线视频 | 国产精品有限公司 | 亚洲激情专区 | 国产成人免费视频网站高清观看视频 | 精品久久久久久久久亚洲 | 久久99精品久久久久久国产越南 | 成人免费三级电影 | 国产精品不卡 | 蜜桃在线视频 | 伊人网综合在线观看 | 美女国产精品 | 亚洲视频在线观看免费 | 亚洲精品一级 | 亚洲精品免费在线观看 | 亚洲网站在线观看 | 午夜视频在线观看一区二区 | 免费观看黄网站 | 久久国产一区 | 国产精品网址 | 国产在线视频三区 | 国产色网| 中文字幕av一区二区三区 |