精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

日韩av在线电影观看| 2019日本中文字幕| 中文字幕55页| 51漫画成人app入口| 99精品视频在线播放观看| 热久久视久久精品18亚洲精品| 欧美性受xxxx黑人| 亚洲日本va中文字幕| 欧美午夜美女看片| 三级三级久久三级久久18| 99热这里只有精品在线| 久久国产精品毛片| 美女福利视频一区| 一区二区三区久久久久| 日韩欧美中文在线观看| 欧美主播一区二区三区| 男的插女的下面视频| 尤物在线视频| 久久久久久免费毛片精品| 97超碰在线播放| 蜜臀99久久精品久久久久小说| 综合久久一区| 色婷婷久久av| 四虎国产精品成人免费入口| 一区二区中文字幕在线观看| 欧美日韩中文一区| 黄色国产精品视频| 第一av在线| 日韩毛片视频在线看| 日韩妆和欧美的一区二区| 天天干,夜夜操| 国产99久久久国产精品潘金 | 久久9热精品视频| 97精品久久久中文字幕免费| 一区视频免费观看| 成人羞羞视频在线看网址| 日韩精品一二三四区| 国产精品99久久久精品无码| 在线免费成人| 欧美日韩aaaaa| 少妇黄色一级片| 综合在线影院| 91福利在线播放| 日韩av资源在线| 久久sese| 在线免费av一区| 噼里啪啦国语在线观看免费版高清版| 伊人久久av| 精品福利在线观看| 一区二区传媒有限公司| 国产福利电影在线播放| 精品久久久久国产| 国产a级片网站| 蜜桃麻豆av在线| 亚洲一区二区五区| 国产xxxx振车| 国产黄大片在线观看| 亚洲成av人综合在线观看| 男人天堂手机在线视频| 国产高清自产拍av在线| 日韩人在线观看| 日韩精品一区二区三区色欲av| 亚洲国产福利| 欧美中文字幕不卡| 九九热精品在线播放| 91成人短视频在线观看| 日韩你懂的在线观看| 亚洲av无一区二区三区久久| 成人福利免费在线观看| 亚洲国模精品私拍| 美女爆乳18禁www久久久久久| 国产亚洲电影| 日韩中文字幕视频在线| 九九视频在线免费观看| 亚洲理伦在线| 国产精品美女久久久免费| 国产精品久久久午夜夜伦鲁鲁| 国产精品香蕉一区二区三区| 国产无套精品一区二区| 黄色在线免费观看大全| 国产精品久久久久久亚洲毛片| a级网站在线观看| av中文在线资源| 91黄色免费版| 18禁一区二区三区| 免费看av成人| 久久躁日日躁aaaaxxxx| 免费精品视频一区| 91丨九色丨海角社区| 蜜臀91精品一区二区三区| 91精品久久久久久久久久| 国产成人精品毛片| 91在线一区二区三区| 亚洲.欧美.日本.国产综合在线| 成人在线直播| 色综合激情五月| 在线视频观看91| 日韩精品免费一区二区三区竹菊| 色婷婷综合成人| 国产在线免费视频| 蜜臀a∨国产成人精品| 成人片在线免费看| 18视频免费网址在线观看| 亚洲成人免费影院| 日本美女视频一区| 日韩免费电影在线观看| 久久亚洲欧美日韩精品专区 | 激情成人综合| 国产精品亚洲第一区| 婷婷五月综合激情| 亚洲免费av网站| 妺妺窝人体色www在线观看| 97久久亚洲| 久久综合88中文色鬼| 久久精品久久久久久久| 成人一区二区三区| 手机看片日韩国产| 欧美va在线观看| 亚洲精品电影久久久| 天堂网avav| 看片网站欧美日韩| 久久综合九九| 国产经典三级在线| 欧美一级艳片视频免费观看| 欧美黄色高清视频| 蘑菇福利视频一区播放| 国产日韩精品一区观看| 快射视频在线观看| 欧美视频在线一区二区三区 | 精品久久久免费视频| 欧美经典三级视频一区二区三区| 国产精品无码av在线播放| 无人区乱码一区二区三区| 久久久999成人| 亚洲一区 中文字幕| 中文字幕 久热精品 视频在线| 国产熟女高潮视频| 亚洲国产欧美日韩在线观看第一区 | 亚洲第一成人网站| 一区二区三区国产盗摄| 国内视频一区二区| 成人免费高清观看| 亚洲精品一线二线三线无人区| 日韩视频中文字幕在线观看| 国内精品伊人久久久久av一坑| 亚洲草草视频| 欧美久久久网站| 日韩有码在线电影| 97精品人妻一区二区三区在线| 中文字幕不卡在线| 伊人色在线观看| 久久久久久久久丰满| 成人国产精品久久久| 黄色片免费在线观看| 91精品蜜臀在线一区尤物| 日本青青草视频| 国产麻豆成人传媒免费观看| 青青在线视频免费观看| 盗摄牛牛av影视一区二区| 国内精品小视频| 五月天婷婷在线播放| 色综合久久久久综合体| 在哪里可以看毛片| 久久精品999| 国产一级大片免费看| 国产欧美三级电影| 26uuu亚洲伊人春色| 国产精品毛片一区二区三区四区| 欧美亚日韩国产aⅴ精品中极品| 婷婷丁香综合网| 国产精品性做久久久久久| 免费看黄在线看| 欧美精品一二| 国产精品免费久久久久久| 秋霞午夜在线观看| 日韩视频在线你懂得| 国产系列精品av| 国产亚洲女人久久久久毛片| 国产成人美女视频| 最新日韩在线| 天堂一区二区三区| 日韩视频一二区| 国产aⅴ夜夜欢一区二区三区| 欧美日本一道| 亚洲第一页自拍| 中文字幕av久久爽| 亚洲一区二区三区精品在线| 亚洲久久久久久久| 国产精品亚洲а∨天堂免在线| 熟女性饥渴一区二区三区| 911久久香蕉国产线看观看| 精品视频高清无人区区二区三区| 国产欧美在线观看免费| 国产综合在线视频| 在线中文资源天堂| 亚洲精品动漫100p| 国产精品伦一区二区三区| 婷婷综合另类小说色区| 一级片一级片一级片| 91丨porny丨最新| 日本高清免费在线视频| 蜜乳av另类精品一区二区| 日本大胆人体视频| 日本一区二区免费高清| 国产偷久久久精品专区| 韩国三级成人在线| 国产精品成人免费视频| av中文字幕在线看| 久久精品视频在线播放| 你懂得在线网址| 欧美精品一区男女天堂| 国产精品久久久久久69| 色婷婷久久久久swag精品| 亚洲精品在线观看av| 国产精品毛片久久久久久久| 日本丰满少妇裸体自慰| 成人午夜精品在线| 嫩草视频免费在线观看| 日韩一区精品字幕| 免费在线a视频| 一区福利视频| 久久在线中文字幕| 91精品二区| 亚洲在线观看一区| av在线不卡顿| 日本高清不卡一区二区三| 另类在线视频| 国产伦精品一区二区三区视频黑人 | 久久99精品国产一区二区三区| 亚洲国产中文在线| 91综合免费在线| 欧洲亚洲精品久久久久| 国产欧美日韩高清| 另类中文字幕国产精品| 国产成人久久久| 欧洲一区二区三区精品| 奇米4444一区二区三区| 手机av在线| 97视频免费看| 国产在线精彩视频| 久久免费在线观看| jizz一区二区三区| 欧美激情高清视频| 欧美黑人猛交| 羞羞色国产精品| 国产网站在线| 欧美亚洲一区在线| 午夜av成人| 国产精品三级美女白浆呻吟| 国产精品亚洲成在人线| 国产一区二区丝袜| 91麻豆精品| 91中文精品字幕在线视频| 91精品日本| 精品国产免费一区二区三区| 人人香蕉久久| 日本电影一区二区三区| 全球成人免费直播| 免费观看黄色大片| 国产精品hd| 亚洲 欧美 日韩 国产综合 在线 | 岛国毛片在线播放| 激情久久五月天| 成人做爰69片免费| 99久久国产免费看| 久久丫精品忘忧草西安产品| 国产精品久久久久久福利一牛影视| 亚洲伦理一区二区三区| 亚洲一区在线播放| 久草视频在线观| 欧美三级三级三级| 国产成人毛毛毛片| 亚洲精品国产品国语在线| 国产在线观看网站| 久久精品久久久久电影| а√在线天堂官网| 国产精品女人久久久久久| 国产精品亚洲欧美一级在线 | 婷婷综合激情网| 一区二区三区天堂av| 18视频在线观看网站| 欧美一区二区三区……| 天天综合91| 久草精品电影| 欧美岛国激情| 中文字幕无码精品亚洲资源网久久| 久久久久国产精品一区三寸 | 久久久久久久久久久电影| 欧美一级特黄高清视频| 午夜精品久久久久久久久久 | 日韩xxxxxxxxx| 欧美在线观看视频在线| 东京干手机福利视频| 中文字幕日本精品| 丝袜在线观看| 国产精品美乳一区二区免费 | av磁力番号网| 久久亚洲国产精品一区二区| 少妇丰满尤物大尺度写真| 久久久久国产精品麻豆| 欧美另类视频在线观看| 欧美在线制服丝袜| 免费观看的毛片| 久久亚洲国产成人| avav成人| 久久综合九色综合网站| 欧美日韩一卡| 亚洲18在线看污www麻豆| 久久久亚洲高清| 国产福利久久久| 91精品国产一区二区人妖| 第一页在线观看| 2019亚洲男人天堂| 国产日韩三级| 国产高清不卡无码视频| 久久99精品一区二区三区三区| 中文字幕免费视频| 精品久久久中文| 亚洲女人18毛片水真多| 久久av资源网站| 亚洲成人毛片| 亚洲综合欧美日韩| 日韩福利电影在线| 一卡二卡三卡四卡| 欧美日韩国产一中文字不卡| 亚洲女同志亚洲女同女播放| 欧美成人免费观看| 国产亚洲高清一区| 一级全黄肉体裸体全过程| 美女一区二区三区在线观看| 中文字幕网站在线观看| 一本色道**综合亚洲精品蜜桃冫| 日韩有码电影| 欧美亚洲在线播放| 亚洲免费专区| 久久精品国产精品亚洲色婷婷| 99在线视频精品| 日韩欧美中文字幕一区二区| 亚洲大胆人体在线| 大桥未久在线视频| 欧美高清视频一区二区三区在线观看| 亚洲每日在线| 中国黄色a级片| 日韩欧美国产成人| 美女毛片在线看| 国产不卡视频在线| sdde在线播放一区二区| www.涩涩涩| 一区在线观看免费| va视频在线观看| 欧美极品美女视频网站在线观看免费 | 二区三区在线观看| 97人摸人人澡人人人超一碰| 狠狠噜噜久久| 三级男人添奶爽爽爽视频| 欧美日韩在线影院| 国产福利片在线| 成人激情视频小说免费下载| 欧美激情aⅴ一区二区三区| 色婷婷狠狠18禁久久| 五月天一区二区| 国产在线观看黄| 91久久国产综合久久91精品网站| 91精品亚洲| xxxwww国产| 在线观看91精品国产入口| 欧洲日本在线| 国产精品久久久久久久久久久久午夜片 | 国产午夜福利在线播放| 久久久久久综合| 国产精品视频a| 久久久视频精品| 国产一区二区三区四区二区 | 国产日产精品一区二区三区| 国产亚洲欧洲黄色| 精品国产乱码久久久久久樱花| 日韩视频免费播放| 国产欧美精品一区二区三区四区| 亚洲一区二区三区高清视频| 欧美激情视频一区二区三区不卡 | 97久久精品人人做人人爽50路| 成人免费毛片视频| 久久综合伊人77777| 欧美三级电影在线| 中文字幕日韩综合| 激情懂色av一区av二区av| 丝袜美腿美女被狂躁在线观看| 国产精品推荐精品| 免费精品视频在线| 日韩av片在线播放| 色伦专区97中文字幕| 国产女人18毛片水真多18精品| 中文字幕 91| 激情懂色av一区av二区av| 老司机免费在线视频| 九九99久久| 国产老妇另类xxxxx| 国产精品久久久久久人| 欧美高清自拍一区| 日韩激情免费|