精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

Linux/Unix下的POSIX規范

運維 系統運維
很多讀者一定不會陌生『\d』、『[a-z]+』之類的表達式,但是如果你用過vi、grep、awk、sed之類Linux/Unix下的工具或許會發現,這些工具雖然支持正則表達式,語法卻很不一樣,照通常習慣的辦法寫的『\d』、『[a-z]+』之類的正則表達式,往往不是無法識別就是匹配錯誤。而且,這些工具自身之間也存在差異,同樣的結構,有時需要轉義有時不需要轉義。這,究竟是為什么呢?原因在于,Unix/Linux下的工具大多采用POSIX規范,

 對正則表達式有基本了解的讀者,一定不會陌生『\d』、『[a-z]+』之類的表達式,前者匹配一個數字字符,后者匹配一個以上的小寫英文字母。但是如果你用過vi、grep、awk、sed之類Linux/Unix下的工具或許會發現,這些工具雖然支持正則表達式,語法卻很不一樣,照通常習慣的辦法寫的『\d』、『[a-z]+』之類的正則表達式,往往不是無法識別就是匹配錯誤。而且,這些工具自身之間也存在差異,同樣的結構,有時需要轉義有時不需要轉義。這,究竟是為什么呢?

原因在于,Unix/Linux下的工具大多采用POSIX規范,同時,POSIX規范又可分為兩種流派(flavor)。所以,首先有必要了解一下POSIX規范。

POSIX規范

常見的正則表達式記法,其實都源于Perl,實際上,正則表達式從Perl衍生出一個顯赫的流派,叫做PCRE(Perl Compatible Regular Expression),『\d』、『\w』、『\s』之類的記法,就是這個流派的特征。但是在PCRE之外,正則表達式還有其它流派,比如下面要介紹的POSIX規范的正則表達式。

POSIX的全稱是Portable Operating System Interface for uniX,它由一系列規范構成,定義了UNIX操作系統應當支持的功能,所以“POSIX規范的正則表達式”其實只是“關于正則表達式的POSIX規范”,它定義了BRE(Basic Regular Expression,基本型正則表達式)和ERE(Extended Regular Express,擴展型正則表達式)兩大流派。在兼容POSIX的UNIX系統上,grep和egrep之類的工具都遵循POSIX規范,一些數據庫系統中的正則表達式也符合POSIX規范。

BRE

在Linux/Unix常用工具中,grep、vi、sed都屬于BRE這一派,它的語法看起來比較奇怪,元字符『(』、『)』、『{』、『}』必須轉義之后才具有特殊含義,所以正則表達式『(a)b』只能匹配字符串 (a)b而不是字符串ab;正則表達式『a{1,2}』只能匹配字符串a{1,2},正則表達式『a\{1,2\}』才能匹配字符串a或者aa。

之所以這么麻煩,是因為這些工具的誕生時間很早,正則表達式的許多功能卻是逐步發展演化出來的,之前這些元字符可能并沒有特殊的含義;為保證向后兼容,就只能使用轉義。而且有些功能甚至根本就不支持,比如BRE就不支持『+』和『?』量詞,也不支持多選結構『(…|…)』和反向引用『\1』、『\2』…。

不過今天,純粹的BRE已經很少見了,畢竟大家已經認為正則表達式“理所應當”支持多選結構和反向引用等功能,沒有確實太不方便。所以雖然vi屬于BRE流派,但提供了這些功能。GNU也對BRE做了擴展,支持『+』、『?』、『|』,只是使用時必須寫成『\+』、『\?』、『\|』,而且也支持『\1』、『\2』之類反向引用。這樣,GNU的grep等工具雖然名義上屬于BRE流,但更確切的名稱是GNU BRE。

ERE

在Linux/Unix常用工具中,egrep、awk則屬于ERE這一派,。雖然BRE名為“基本”而ERE名為“擴展”,但ERE并不要求兼容BRE的語法,而是自成一體。因此其中的元字符不用轉義(在元字符之前添加反斜線會取消其特殊含義),所以『(ab|cd)』就可以匹配字符串ab或者cd,量詞『+』、『?』、『{n,m}』可以直接使用。ERE并沒有明確規定支持反向引用,但是不少工具都支持『\1』、『\2』之類的反向引用。

GNU出品的egrep等工具就屬于ERE流(更準確的名字是GNU ERE),但因為GNU已經對BRE做了不少擴展,所謂的GNU ERE其實只是個說法而已,它有的功能GNU BRE都有了,只是元字符不需要轉義而已。

下面的表格簡要說明了幾種POSIX流派的區別[1](其實,現在的BRE和ERE在功能上并沒有什么區別,主要的差異是在元字符的轉義上)。

幾種POSIX流派的說明

流派 說明 工具
BRE (、)、{、}都必須轉義使用,不支持+、?、| grep、sed、vi(但vi支持這些多選結構和反向引用)
GNU  BRE(、)、{、}、+、?、|都必須轉義使用 GNU grep、GNU sed
ERE 元字符不必轉義,+、?、(、)、{、}、|可以直接使用,\1、\2的支持不確定 egrep、awk
GNU ERE 元字符不必轉義,+、?、(、)、{、}、|可以直接使用,支持\1、\2 grep –E、GNU awk

為了方便查閱,下面再用一張表格列出基本的正則功能在常用工具中的表示法,其中的工具GNU的版本為準。

常用Linux/Unix工具中的表示法

PCRE記法 vi/vim grep awk sed
* * * * *
+ \+ \+ + \+
? \= \? ? \?
{m,n} \{m,n} \{m,n\} {m,n} \{m,n\}
\b * \< \> \< \> \< \> \y \< \>
(…|…) \(…\|…\) \(…\|…\) (…|…) (…|…)
(…) \(…\) \(…\) (…) (…)
\1 \2 \1 \2 \1 \2 不支持 \1 \2

注:PCRE中常用\b來表示“單詞的起始或結束位置”,但Linux/Unix的工具中,通常用\<來匹配“單詞的起始位置”,用\>來匹配“單詞的結束位置”,sed中的\y可以同時匹配這兩個位置。

POSIX字符組

在某些文檔中,你還會發現類似『[:digit:]』、『[:lower:]』之類的表示法,它們看起來不難理解(digit就是“數字”,lower就是“小寫”),但又很奇怪,這就是POSIX字符組。不僅在Linux/Unix的常見工具中,甚至一些變成語言中都出現了這些字符組,為避免困惑,這里有必要簡要介紹它們。

在POSIX規范中,『[a-z]』、『[aeiou]』之類的記法仍然是合法的,其意義與PCRE中的字符組也沒有區別,只是這類記法的準確名稱是POSIX方括號表達式(bracket expression),它主要用在Unix/Linux系統中。POSIX方括號表示法與PCRE字符組的最主要差別在于:POSIX字符組中,反斜線\不是用來轉義的。所以POSIX方括號表示法『[\d]』只能匹配\和d兩個字符,而不是『[0-9]』對應的數字字符。

為了解決字符組中特殊意義字符的轉義問題,POSIX方括號表示法規定,如果要在字符組中表達字符](而不是作為字符組的結束標記),應當讓它緊跟在字符組的開方括號之后,所以POSIX中,正則表達式『[]a]』能匹配的字符就是]和a;如果要在POSIX方括號表示法中表達字符-(而不是范圍表示法),必須將它緊挨在閉方括號]之前,所以『[a-]』能匹配的字符就是a和-。

POSIX規范也定義了POSIX字符組,它近似等價于于PCRE的字符組簡記法,用一個有直觀意義的名字來表示某一組字符,比如digit表示“數字字符”,alpha表示“字母字符”。

不過,POSIX中還有一個值得注意的概念:locale(通常翻譯為“語言環境”)。它是一組與語言和文化相關的設定,包括日期格式、貨幣幣值、字符編碼等等。POSIX字符組的意義會根據locale的變化而變化,下面的表格介紹了常見的POSIX字符組在ASCII語言環境與Unicode語言環境下的意義,供大家參考。

POSIX字符組

POSIX字符組 說明 ASCII語言環境 Unicode語言環境
[:alnum:]* 字母字符和數字字符 [a-zA-Z0-9] [\p{L&}\p{Nd}]
[:alpha:] 字母 [a-zA-Z] \p{L&}
[:ascii:] ASCII字符 [\x00-\x7F] \p{InBasicLatin}
[:blank:] 空格字符和制表符 [ \t] [\p{Zs}\t]
[:cntrl:] 控制字符 [\x00-\x1F\x7F] \p{Cc}
[:digit:] 數字字符 [0-9] \p{Nd}
[:graph:] 空白字符之外的字符 [\x21-\x7E] [^\p{Z}\p{C}]
[:lower:] 小寫字母字符 [a-z] \p{Ll}
[:print:] 類似[:graph:],但包括空白字符 [\x20-\x7E] \P{C}
[:punct:] 標點符號 [][!"#$%&'()*+,./:;<=>?@\^_`{|}~-] [\p{P}\p{S}]
[:space:] 空白字符 [ \t\r\n\v\f] [\p{Z}\t\r\n\v\f]
[:upper:] 大寫字母字符 [A-Z] \p{Lu}
[:word:]* 字母字符 [A-Za-z0-9_] [\p{L}\p{N}\p{Pc}]
[:xdigit:] 十六進制字符 [A-Fa-f0-9] [A-Fa-f0-9]

注1:標記*的字符組簡記法并不是POSIX規范中的,但使用很多,一般語言中都提供,文檔中也會出現。

注2:對應的Unicode屬性請參考本系列文章已經刊發過的關于Unicode的部分。

POSIX字符組的使用有所不同。主要區別在于,PCRE字符組簡記法可以脫離方括號直接出現,而POSIX字符組必須出現在方括號內,所以同樣是匹配數字字符,單獨出現時,PCRE中可以直接寫『\d』,而POSIX字符組就必須寫成『[[:digit:]]』。

Linux/Unix下的工具中,一般都可以直接使用POSIX字符組,而PCRE的字符組簡記法『\w』、『\d』等則大多不支持,所以如果你看到『[[:space:]]』而不是『\s』,一定不要感到奇怪。

不過,在常用的編程語言中,Java、PHP、Ruby也支持使用POSIX字符組。其中Java和PHP中的POSIX字符組都是按照ASCII語言環境進行匹配;Ruby的情況則要復雜一點,Ruby 1.8按照ASCII語言環境進行匹配,而且不支持『[:word:]』和『[:alnum:]』,Ruby 1.9按照Unicode語言環境進行匹配,同時支持『[:word:]』和『[:alnum:]』。

原文:http://www.infoq.com/cn/news/2011/07/regular-expressions-6-POSIX

【編輯推薦】

  1. Linux下的七個類Dropbox同步工具推薦
  2. 性能損耗?文件服務器容量工具告訴你為什么
  3. 51CTO專訪田逸:運維這十年 手邊的那些工具
  4. 實用推薦:24個很酷的Linux/Unix工具
責任編輯:黃丹 來源: InfoQ
相關推薦

2009-09-16 08:39:15

LinuxUnix數學計算

2011-08-23 17:46:09

LUA正則表達式模式

2010-07-01 12:36:00

2010-03-23 16:35:31

shell 腳本編程

2011-09-05 17:44:49

LinuxUnix

2009-12-03 10:12:24

LinuxUnix

2010-11-19 10:01:08

Oracle創建實例

2009-09-29 10:45:17

UnixLinuxshell

2014-03-13 16:34:04

LinuxBashKSH shel

2011-07-14 09:17:01

Unix數據中心

2010-03-08 09:27:55

Linux Unix區

2011-07-26 09:48:47

Shell快捷鍵grepinit

2009-08-30 15:14:13

SCOUNIX多級域名

2011-05-13 11:14:18

2020-12-07 10:30:39

LinuxUnix物聯網

2009-08-20 16:41:30

unixLinux低級IO函數

2013-07-23 17:26:07

2012-05-22 15:37:10

2020-05-12 16:58:05

LinuxUnix技術

2012-04-01 10:14:27

linuxunix
點贊
收藏

51CTO技術棧公眾號

日韩影视在线观看| 精精国产xxxx视频在线| 在线一区欧美| 国产亚洲日本欧美韩国| 性生活免费在线观看| 国产在线观看a| 91伊人久久大香线蕉| 国产精品扒开腿做爽爽爽男男| 亚洲色图欧美色| 亚洲精品午夜| 色综合久久久久网| 伊人狠狠色丁香综合尤物| 亚洲国产精品欧美久久| 日韩精品一区第一页| 欧美成人四级hd版| 少妇按摩一区二区三区| 国产在线不卡一区二区三区| 天天综合天天做天天综合| 欧美午夜精品久久久久免费视| 中文字幕在线一| 亚洲黄色av| 精品国产一区二区三区久久狼5月 精品国产一区二区三区久久久狼 精品国产一区二区三区久久久 | 三级影片在线看| 欧美日韩一本| 91精品国产综合久久福利软件| 人妻有码中文字幕| av在线播放观看| 国产日韩欧美综合一区| 国产精品二区三区| 曰批又黄又爽免费视频| 日韩午夜电影| 欧美精品一区在线播放| 亚洲午夜精品久久久久久高潮| 国产精品45p| 91精品久久久久久久99蜜桃| 妺妺窝人体色www在线观看| 波多野结衣在线高清| 日韩一区在线免费观看| 色播亚洲婷婷| 青青久在线视频免费观看| 国产精品一区二区久久不卡| 日本老师69xxx| 日韩欧美国产亚洲| 午夜久久久久| 久久成人在线视频| 91ts人妖另类精品系列| 激情五月综合网| 亚洲女同性videos| 制服丝袜第二页| 久久久伦理片| 精品久久久久久综合日本欧美| 五月天视频在线观看| 成人做爰免费视频免费看| 色综合久久久久综合体| 日韩av资源在线| 欧美男人天堂| 欧美日韩亚洲视频| 欧美变态另类刺激| 天天综合av| 欧美性猛交xxxx免费看| 国产精品后入内射日本在线观看| 国产高清中文字幕在线| 午夜影院久久久| www黄色日本| 亚洲免费福利| 在线精品视频一区二区| 日本美女高潮视频| av在线不卡精品| 欧美系列在线观看| gogogo高清免费观看在线视频| 狂野欧美性猛交xxxx| 欧美日韩激情一区二区三区| 亚洲怡红院在线| 亚洲tv在线| 日韩一区二区在线看| 三级黄色片播放| 最新精品在线| 精品亚洲va在线va天堂资源站| aaaaaav| 国产精品视频一区二区三区四蜜臂| 国产一区二区美女视频| av在线播放中文字幕| 99精品综合| 欧美日本高清视频| 日韩黄色三级视频| 首页综合国产亚洲丝袜| 国产在线一区二区三区| www.激情五月| 99久久婷婷国产综合精品电影| 麻豆成人av| 又爽又大又黄a级毛片在线视频| 综合欧美一区二区三区| 久久av综合网| 成人精品电影在线| 在线不卡免费av| yjizz视频| 国产精品欧美在线观看| 久久国产加勒比精品无码| 国产亚洲成人精品| 日日摸夜夜添夜夜添国产精品| 国产精品一区二区三区久久久| 亚洲AV无码国产精品午夜字幕 | 亚洲在线www| 无码国产色欲xxxx视频| 国产精品天干天干在观线| 国产内射老熟女aaaa| 日本在线高清| 91精品国产色综合久久 | 国产精品视频一区二区三区不卡| 成年人三级视频| 亚洲同志男男gay1069网站| 欧美日韩午夜在线| 久久精品女同亚洲女同13| 成人在线免费观看91| 午夜精品久久久久久久99热浪潮| 国产美女www| 成人一区在线观看| 一区二区不卡视频| 亚洲综合电影| 日韩欧美一区在线观看| 久久久久久成人网| 精品白丝av| 91亚洲精品在线| 黄色在线网站| 婷婷久久综合九色综合伊人色| 婷婷免费在线观看| 亚洲人成亚洲精品| 欧美激情a在线| 91麻豆成人精品国产| 26uuu国产在线精品一区二区| 国产911在线观看| 99riav视频一区二区| 日韩av在线一区二区| 国产激情视频一区| 日韩av一二三区| 国产一区二区三区免费播放| 日韩亚洲视频在线| 精品丝袜在线| 精品国产凹凸成av人网站| www.av成人| 久久精品国产一区二区三区免费看 | 美日韩一区二区| 久久久精品动漫| 成全电影大全在线观看| 欧美精品乱码久久久久久| 日本理论中文字幕| 手机精品视频在线观看| 久久精品一二三区| 精精国产xxxx视频在线野外| 亚洲成av人片在线观看香蕉| 久久午夜无码鲁丝片午夜精品| 国产一区二区成人久久免费影院| 一区二区三区不卡在线| 91精品美女| 色吧影院999| 中文在线最新版天堂| 久久精品视频免费观看| 久久视频这里有精品| 成人福利免费在线观看| 久久久久久有精品国产| 黄频网站在线观看| 亚洲国产精品久久久久婷婷884| 国产精品19p| 欧美激情第10页| 产国精品偷在线| 国产蜜臀一区二区打屁股调教| 精品国产一区二区三区忘忧草| 久久精品这里只有精品| 成人一区二区视频| ww国产内射精品后入国产| 亚洲综合图色| 国产精品久久久久久久av大片| a视频网址在线观看| 欧美喷潮久久久xxxxx| 欧美一级片在线视频| 国产精品一区二区91| www.av蜜桃| 亚洲精品小区久久久久久| 日韩av免费在线| av二区在线| 日韩欧美国产一区二区在线播放| 精品在线视频免费| 91丨九色丨蝌蚪丨老版| 精品久久久久久久无码 | 97se狠狠狠综合亚洲狠狠| 男人操女人免费软件| 波多野结衣在线观看一区二区三区| 欧美最猛性xxxxx(亚洲精品)| av在线电影观看| 欧美一级久久久| 99精品视频99| 国产精品国产馆在线真实露脸| 国产人妻精品久久久久野外| 99精品视频免费观看| 日韩一区二区三区高清| 免费精品一区| 日本人成精品视频在线| 三区四区在线视频| 精品美女一区二区三区| 一级黄色av片| 亚洲三级电影网站| 日本japanese极品少妇| 老汉av免费一区二区三区| 国产freexxxx性播放麻豆 | 99精品视频网站| 国产精品色呦| 91精品国产综合久久久久久久久 | 国产精品毛片a∨一区二区三区|国| 美女免费久久| 日韩毛片在线看| 国产乱子伦精品无码码专区| 婷婷中文字幕综合| www.av成人| 国产日韩欧美高清| 黄色激情在线观看| 精品一区二区三区不卡| 日韩久久一级片| 欧美女人交a| 亚洲高清在线观看一区| 香蕉久久夜色精品国产更新时间| 亚洲xxx大片| 91国拍精品国产粉嫩亚洲一区| 97在线日本国产| 成人免费观看视频大全| 亚洲一二三在线| 蜜臀av免费在线观看| 在线播放中文一区| www.久久久久久久| 亚洲国产视频一区二区| 免费精品在线视频| 中文字幕欧美国产| 亚洲精品理论片| 成人免费视频网站在线观看| 人妻少妇偷人精品久久久任期| 奇米影视一区二区三区小说| 妞干网在线免费视频| 亚洲三级视频| 女人色极品影院| 综合天堂av久久久久久久| 亚洲精品自在在线观看| 精品国产乱码久久久| 欧美精品一区二区三区在线四季| 国产乱人伦精品一区| 成人av男人的天堂| 中文成人在线| 91日韩在线视频| 国产日韩在线观看视频| 成人av资源在线播放| 日韩电影免费观看高清完整版在线观看| 国产97免费视| 日本免费久久| 国产精品www网站| 桃花岛成人影院| 国产aⅴ夜夜欢一区二区三区| 伊人色综合一区二区三区影院视频 | 在线看一级片| 欧美老少做受xxxx高潮| av免费网站在线观看| 欧美老女人性视频| 国产精品69xx| 91国内免费在线视频| 91美女精品| 欧美亚洲成人免费| 成人勉费视频| 国产精品久久久久久久久久新婚 | 精品国产av无码| 久久久电影一区二区三区| 欧美性猛交xxxx乱| 中文一区二区在线观看| 中文字幕电影av| 亚洲午夜电影在线| 羞羞影院体验区| 91成人免费在线视频| 无码人妻丰满熟妇精品| 欧美亚洲国产一卡| 国产婷婷在线视频| 精品国产污网站| 欧美精品久久久久久久久久丰满| 一区二区三区视频观看| 久久77777| 欧美激情中文字幕在线| 日韩深夜视频| 国产精品视频久久久| 玖玖精品一区| 九色综合婷婷综合| 清纯唯美亚洲综合一区| 亚洲小视频在线播放| 国产亚洲网站| 午夜视频在线网站| 成人精品一区二区三区四区| 波多野结衣一本| 亚洲欧洲美洲综合色网| 国产午夜久久久| 色av成人天堂桃色av| 国产精品久久久久精| 亚洲精品久久久久国产| jizz在线观看中文| 久久久免费电影| 国产91精品在线| 成人久久18免费网站漫画| 亚洲人成精品久久久| 成人在线观看www| 美女91精品| 韩国一区二区三区四区| 国产三级三级三级精品8ⅰ区| 真实国产乱子伦对白在线| 色婷婷av一区二区三区软件| 精品国产99久久久久久宅男i| 亚洲全黄一级网站| 久久99亚洲网美利坚合众国| 国产精品久久二区| 欧美美女啪啪| 中国黄色录像片| 日韩电影网1区2区| a级片在线观看视频| 亚洲私人影院在线观看| 欧美一区二区三区久久久| 欧美xfplay| 久久久久久久久免费视频| 国产精品电影网站| 精品按摩偷拍| 精品一区二区三区毛片| 免费观看日韩电影| 日韩精品电影一区二区| 亚洲午夜久久久久久久久电影院 | 亚洲精品成人久久电影| а√天堂在线官网| 国产美女直播视频一区| 国产成人短视频在线观看| 日韩av高清在线看片| 国产精品亚洲第一区在线暖暖韩国| 亚洲黄色网址大全| 色狠狠综合天天综合综合| 视频一区 中文字幕| 欧美黑人xxxx| 日韩中文字幕在线一区| 一区在线电影| 麻豆成人久久精品二区三区红 | 午夜性色福利视频| 欧美极品美女视频网站在线观看免费| 成人在线精品| 伊人久久大香线蕉av一区| 久久精品久久精品| 免费看的黄色录像| 欧美三级电影精品| 国产福利第一视频在线播放| 日韩免费av在线| 国产精品欧美三级在线观看| 日韩免费高清在线| 久久久精品免费网站| 国产一级片av| 国产亚洲美女精品久久久| 日韩不卡免费高清视频| 欧美日本国产精品| 久久久综合网| 超碰人人干人人| 欧美日韩久久久久久| 黄色成人在线观看| 亚洲在线免费观看| 亚洲无毛电影| 丰满少妇一区二区三区| 日韩欧美在线视频观看| 成人在线观看免费| 国产精品美女在线观看| 水蜜桃精品av一区二区| 天天操夜夜操很很操| 一区二区三区四区乱视频| 六月丁香综合网| 国产91精品高潮白浆喷水| 一本久久青青| 天天爽夜夜爽一区二区三区| 亚洲色图视频免费播放| 后入内射欧美99二区视频| 2019精品视频| 日本a口亚洲| 999久久久精品视频| 亚洲综合一区在线| 亚洲三级黄色片| 国产精品欧美一区二区三区奶水| 欧美国产美女| 无码国产精品一区二区高潮| 岛国av午夜精品| 91短视频版在线观看www免费| 91综合免费在线| 一区二区三区导航| 日韩av片在线| 日韩免费福利电影在线观看| 一区二区电影免费观看| 伊人久久av导航| 99精品欧美一区| 亚洲性生活大片| 久久久久久久久久久国产| 最新国产精品视频| 亚洲热在线视频| 色综合久久久久久久久| 精精国产xxxx视频在线| 久久精品人成| 国产一区二区三区蝌蚪| 五月婷婷激情视频| 久热国产精品视频|