1. 程式人生 > >golang 正則表示式 regexp

golang 正則表示式 regexp

Golang中的正則表示式 ------------------------------------------------------------ 用法: ------------------------------ 單一:     .        匹配任意一個字元,如果設定 s = true,則可以匹配換行符     [字元類]      匹配“字元類”中的一個字元,“字元類”見後面的說明     [^字元類]    匹配“字元類”外的一個字元,“字元類”見後面的說明     \小寫Perl標記  匹配“Perl類”中的一個字元,“Perl類”見後面的說明     \大寫Perl標記  匹配“Perl類”外的一個字元,“Perl類”見後面的說明     [:ASCII類名:]  匹配“ASCII類”中的一個字元,“ASCII類”見後面的說明     [:^ASCII類名:]  匹配“ASCII類”外的一個字元,“ASCII類”見後面的說明     \pUnicode普通類名 匹配“Unicode類”中的一個字元(僅普通類),“Unicode類”見後面的說明     \PUnicode普通類名 匹配“Unicode類”外的一個字元(僅普通類),“Unicode類”見後面的說明     \p{Unicode類名}  匹配“Unicode類”中的一個字元,“Unicode類”見後面的說明     \P{Unicode類名}  匹配“Unicode類”外的一個字元,“Unicode類”見後面的說明 ------------------------------ 複合:     xy      匹配 xy(x 後面跟隨 y)     x|y      匹配 x 或 y (優先匹配 x) ------------------------------ 重複:     x*      匹配零個或多個 x,優先匹配更多(貪婪)     x+      匹配一個或多個 x,優先匹配更多(貪婪)     x?      匹配零個或一個 x,優先匹配一個(貪婪)     x{n,m}    匹配 n 到 m 個 x,優先匹配更多(貪婪)     x{n,}    匹配 n 個或多個 x,優先匹配更多(貪婪)     x{n}    只匹配 n 個 x     x*?      匹配零個或多個 x,優先匹配更少(非貪婪)     x+?      匹配一個或多個 x,優先匹配更少(非貪婪)     x??      匹配零個或一個 x,優先匹配零個(非貪婪)     x{n,m}?    匹配 n 到 m 個 x,優先匹配更少(非貪婪)     x{n,}?    匹配 n 個或多個 x,優先匹配更少(非貪婪)     x{n}?    只匹配 n 個 x ------------------------------ 分組:     (子表示式)      被捕獲的組,該組被編號 (子匹配)     (?P<命名>子表示式)  被捕獲的組,該組被編號且被命名 (子匹配)     (?:子表示式)    非捕獲的組 (子匹配)     (?標記)      在組內設定標記,非捕獲,標記影響當前組後的正則表示式     (?標記:子表示式)  在組內設定標記,非捕獲,標記影響當前組內的子表示式     標記的語法是:     xyz (設定 xyz 標記)     -xyz (清除 xyz 標記)     xy-z (設定 xy 標記, 清除 z 標記)     可以設定的標記有:     i      不區分大小寫 (預設為 false
)     m      多行模式:讓 ^ 和 $ 匹配整個文字的開頭和結尾,而非行首和行尾(預設為 false)     s      讓 . 匹配 \n (預設為 false)     U      非貪婪模式:交換 x* 和 x*? 等的含義 (預設為 false) ------------------------------ 位置標記:     ^      如果標記 m=true 則匹配行首,否則匹配整個文字的開頭(m 預設為 false)     $      如果標記 m=true
則匹配行尾,否則匹配整個文字的結尾(m 預設為 false)     \A      匹配整個文字的開頭,忽略 m 標記     \b      匹配單詞邊界     \B      匹配非單詞邊界     \z      匹配整個文字的結尾,忽略 m 標記 ------------------------------ 轉義序列:     \a      匹配響鈴符  (相當於 \x07)           注意:正則表示式中不能使用 \b 匹配退格符,因為 \b 被用來匹配單詞邊界,           可以使用 \x08 表示退格符。     \f      匹配換頁符  (相當於 \x0C)     \t      匹配橫向製表符(相當於 \x09)     \n      匹配換行符  (相當於 \x0A)     \r      匹配回車符  (相當於 \x0D)     \v      匹配縱向製表符(相當於 \x0B)     \123
    匹配 8 進位制編碼所代表的字元(必須是 3 位數字)     \x7F    匹配 16 進位制編碼所代表的字元(必須是 3 位數字)     \x{10FFFF}  匹配 16 進位制編碼所代表的字元(最大值 10FFFF )     \Q...\E    匹配 \Q 和 \E 之間的文字,忽略文字中的正則語法     \\      匹配字元 \     \^      匹配字元 ^     \$      匹配字元 $     \.      匹配字元 .     \*      匹配字元 *     \+      匹配字元 +     \?      匹配字元 ?     \{      匹配字元 {     \}      匹配字元 }     \(      匹配字元 (     \)      匹配字元 )     \[      匹配字元 [     \]      匹配字元 ]     \|      匹配字元 | ------------------------------ 可以將“命名字元類”作為“字元類”的元素:     [\d]    匹配數字 (相當於 \d)     [^\d]    匹配非數字 (相當於 \D)     [\D]    匹配非數字 (相當於 \D)     [^\D]    匹配數字 (相當於 \d)     [[:name:]]  命名的“ASCII 類”包含在“字元類”中 (相當於 [:name:])     [^[:name:]]  命名的“ASCII 類”不包含在“字元類”中 (相當於 [:^name:])     [\p{Name}]  命名的“Unicode 類”包含在“字元類”中 (相當於 \p{Name})     [^\p{Name}]  命名的“Unicode 類”不包含在“字元類”中 (相當於 \P{Name}) ------------------------------------------------------------ 說明: ------------------------------ “字元類”取值如下(“字元類”包含“Perl類”、“ASCII類”、“Unicode類”):   x          單個字元   A-Z        字元範圍(包含首尾字元)   \小寫字母      Perl類   [:ASCII類名:]    ASCII類   \p{Unicode指令碼類名} Unicode類 (指令碼類)   \pUnicode普通類名  Unicode類 (普通類) ------------------------------ “Perl 類”取值如下:   \d      數字 (相當於 [0-9])   \D      非數字 (相當於 [^0-9])   \s      空白 (相當於 [\t\n\f\r ])   \S      非空白 (相當於[^\t\n\f\r ])   \w      單詞字元 (相當於 [0-9A-Za-z_])   \W      非單詞字元 (相當於 [^0-9A-Za-z_]) ------------------------------ “ASCII 類”取值如下   [:alnum:]  字母數字 (相當於 [0-9A-Za-z])   [:alpha:]  字母 (相當於 [A-Za-z])   [:ascii:]  ASCII 字符集 (相當於 [\x00-\x7F])   [:blank:]  空白佔位符 (相當於 [\t ])   [:cntrl:]  控制字元 (相當於 [\x00-\x1F\x7F])   [:digit:]  數字 (相當於 [0-9])   [:graph:]  圖形字元 (相當於 [!-~])   [:lower:]  小寫字母 (相當於 [a-z])   [:print:]  可列印字元 (相當於 [ -~] 相當於 [ [:graph:]])   [:punct:]  標點符號 (相當於 [!-/:[email protected][-反引號{-~])   [:space:]  空白字元(相當於 [\t\n\v\f\r ])   [:upper:]  大寫字母(相當於 [A-Z])   [:word:]  單詞字元(相當於 [0-9A-Za-z_])   [:xdigit:]  16 進位制字符集(相當於 [0-9A-Fa-f]) ------------------------------ “Unicode 類”取值如下---普通類:   C        -其他-    (other)   Cc        控制字元    (control)   Cf        格式      (format)   Co        私人使用區  (private use)   Cs        代理區    (surrogate)   L        -字母-    (letter)   Ll        小寫字母    (lowercase letter)   Lm        修飾字母    (modifier letter)   Lo        其它字母    (other letter)   Lt        首字母大寫字母 (titlecase letter)   Lu        大寫字母    (uppercase letter)   M        -標記-    (mark)   Mc        間距標記    (spacing mark)   Me        關閉標記    (enclosing mark)   Mn        非間距標記  (non-spacing mark)   N        -數字-    (number)   Nd        十進位制數字  (decimal number)   Nl        字母數字    (letter number)   No        其它數字    (other number)   P        -標點-    (punctuation)   Pc        連線符標點  (connector punctuation)   Pd        破折號標點符號 (dash punctuation)   Pe        關閉的標點符號 (close punctuation)   Pf        最後的標點符號 (final punctuation)   Pi        最初的標點符號 (initial punctuation)   Po        其他標點符號  (other punctuation)   Ps        開放的標點符號 (open punctuation)   S        -符號-    (symbol)   Sc        貨幣符號    (currency symbol)   Sk        修飾符號    (modifier symbol)   Sm        數學符號    (math symbol)   So        其他符號    (other symbol)   Z        -分隔符-    (separator)   Zl        行分隔符    (line separator)   Zp        段落分隔符  (paragraph separator)   Zs        空白分隔符  (space separator) ------------------------------ “Unicode 類”取值如下---指令碼類:   Arabic        阿拉伯文   Armenian        亞美尼亞文   Balinese        巴厘島文   Bengali        孟加拉文   Bopomofo        漢語拼音字母   Braille        盲文   Buginese        布吉文   Buhid        布希德文   Canadian_Aboriginal  加拿大土著文   Carian        卡里亞文   Cham          佔族文   Cherokee        切諾基文   Common        普通的,字元不是特定於一個指令碼   Coptic        科普特文   Cuneiform      楔形文字   Cypriot        塞普勒斯文   Cyrillic        斯拉夫文   Deseret        猶他州文   Devanagari      梵文   Ethiopic        衣索比亞文   Georgian        喬治亞文   Glagolitic      格拉哥里文   Gothic        哥特文   Greek        希臘   Gujarati        古吉拉特文   Gurmukhi        果魯穆奇文   Han          漢文   Hangul        韓文   Hanunoo        哈魯喏文   Hebrew        希伯來文   Hiragana        平假名(日語)   Inherited      繼承前一個字元的指令碼   Kannada        坎那達文   Katakana        片假名(日語)   Kayah_Li        克耶字母   Kharoshthi      卡羅須提文   Khmer        高棉文   Lao          寮國文   Latin        拉丁文   Lepcha        雷布查文   Limbu        林布文   Linear_B        B類線形文字(古希臘)   Lycian        利西亞文   Lydian        呂底亞文   Malayalam      馬拉雅拉姆文   Mongolian      蒙古文   Myanmar        緬甸文   New_Tai_Lue      新傣仂文   Nko          Nko文   Ogham        歐甘文   Ol_Chiki        桑塔利文   Old_Italic      古義大利文   Old_Persian      古波斯文   Oriya        奧里亞文   Osmanya        奧斯曼亞文   Phags_Pa        八思巴文   Phoenician      腓尼基文   Rejang        拉讓文   Runic        古代北歐文字   Saurashtra      索拉什特拉文(印度縣城)   Shavian        蕭伯納文   Sinhala        僧伽羅文   Sundanese      巽他文   Syloti_Nagri      錫爾赫特文   Syriac        敘利亞文   Tagalog        塔加拉文   Tagbanwa        塔格巴努亞文   Tai_Le        德巨集傣文   Tamil        泰米爾文   Telugu        泰盧固文   Thaana        塔安那文   Thai          泰文   Tibetan        藏文   Tifinagh        提非納文   Ugaritic        烏加里特文   Vai          瓦伊文   Yi          彝文 ------------------------------------------------------------ 注意:   對於 [a-z] 這樣的正則表示式,如果要在 [] 中匹配 - ,可以將 - 放在 [] 的開頭或結尾,例如 [-a-z] 或 [a-z-]   可以在 [] 中使用轉義字元:\f、\t、\n、\r、\v、\377、\xFF、\x{10FFFF}、\\、\^、\$、\.、\*、\+、\?、\{、\}、\(、\)、\[、\]、\|(具體含義見上面的說明)   如果在正則表示式中使用了分組,則在執行正則替換的時候,“替換內容”中可以使用 $1、${1}、$name、${name} 這樣的“分組引用符”獲取相應的分組內容。其中 $0 代表整個匹配項,$1 代表第 1 個分組,$2 代表第 2 個分組,……。   如果“分組引用符”是 $name 的形式,則在解析的時候,name 是取儘可能長的字串,比如:$1x 相當於 ${1x},而不是${1}x,再比如:$10 相當於 ${10},而不是 ${1}0。   由於 $ 字元會被轉義,所以要在“替換內容”中使用 $ 字元,可以用 \$ 代替。   上面介紹的正則表示式語法是“Perl 語法”,除了“Perl 語法”外,Go 語言中還有另一種“POSIX 語法”,“POSIX 語法”除了不能使用“Perl 類”之外,其它都一樣。