1. 程式人生 > >Go語言正則

Go語言正則

單一匹配

        .                   匹配任意一個字元,如果設定 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 類”之外,其它都一樣。

示例

        text := `Hello 世界!123 Go.`

	// 查詢連續的小寫字母
	reg := regexp.MustCompile(`[a-z]+`)
	fmt.Printf("%q\n", reg.FindAllString(text, -1))
	// ["ello" "o"]

	// 查詢連續的非小寫字母
	reg = regexp.MustCompile(`[^a-z]+`)
	fmt.Printf("%q\n", reg.FindAllString(text, -1))
	// ["H" " 世界!123 G" "."]

	// 查詢連續的單詞字母
	reg = regexp.MustCompile(`[\w]+`)
	fmt.Printf("%q\n", reg.FindAllString(text, -1))
	// ["Hello" "123" "Go"]

	// 查詢連續的非單詞字母、非空白字元
	reg = regexp.MustCompile(`[^\w\s]+`)
	fmt.Printf("%q\n", reg.FindAllString(text, -1))
	// ["世界!" "."]

	// 查詢連續的大寫字母
	reg = regexp.MustCompile(`[[:upper:]]+`)
	fmt.Printf("%q\n", reg.FindAllString(text, -1))
	// ["H" "G"]

	// 查詢連續的非 ASCII 字元
	reg = regexp.MustCompile(`[[:^ascii:]]+`)
	fmt.Printf("%q\n", reg.FindAllString(text, -1))
	// ["世界!"]

	// 查詢連續的標點符號
	reg = regexp.MustCompile(`[\pP]+`)
	fmt.Printf("%q\n", reg.FindAllString(text, -1))
	// ["!" "."]

	// 查詢連續的非標點符號字元
	reg = regexp.MustCompile(`[\PP]+`)
	fmt.Printf("%q\n", reg.FindAllString(text, -1))
	// ["Hello 世界" "123 Go"]

	// 查詢連續的漢字
	reg = regexp.MustCompile(`[\p{Han}]+`)
	fmt.Printf("%q\n", reg.FindAllString(text, -1))
	// ["世界"]

	// 查詢連續的非漢字字元
	reg = regexp.MustCompile(`[\P{Han}]+`)
	fmt.Printf("%q\n", reg.FindAllString(text, -1))
	// ["Hello " "!123 Go."]

	// 查詢 Hello 或 Go
	reg = regexp.MustCompile(`Hello|Go`)
	fmt.Printf("%q\n", reg.FindAllString(text, -1))
	// ["Hello" "Go"]

	// 查詢行首以 H 開頭,以空格結尾的字串
	reg = regexp.MustCompile(`^H.*\s`)
	fmt.Printf("%q\n", reg.FindAllString(text, -1))
	// ["Hello 世界!123 "]

	// 查詢行首以 H 開頭,以空白結尾的字串(非貪婪模式)
	reg = regexp.MustCompile(`(?U)^H.*\s`)
	fmt.Printf("%q\n", reg.FindAllString(text, -1))
	// ["Hello "]

	// 查詢以 hello 開頭(忽略大小寫),以 Go 結尾的字串
	reg = regexp.MustCompile(`(?i:^hello).*Go`)
	fmt.Printf("%q\n", reg.FindAllString(text, -1))
	// ["Hello 世界!123 Go"]

	// 查詢 Go.
	reg = regexp.MustCompile(`\QGo.\E`)
	fmt.Printf("%q\n", reg.FindAllString(text, -1))
	// ["Go."]

	// 查詢從行首開始,以空格結尾的字串(非貪婪模式)
	reg = regexp.MustCompile(`(?U)^.* `)
	fmt.Printf("%q\n", reg.FindAllString(text, -1))
	// ["Hello "]

	// 查詢以空格開頭,到行尾結束,中間不包含空格字串
	reg = regexp.MustCompile(` [^ ]*$`)
	fmt.Printf("%q\n", reg.FindAllString(text, -1))
	// [" Go."]

	// 查詢“單詞邊界”之間的字串
	reg = regexp.MustCompile(`(?U)\b.+\b`)
	fmt.Printf("%q\n", reg.FindAllString(text, -1))
	// ["Hello" " 世界!" "123" " " "Go"]

	// 查詢連續 1 次到 4 次的非空格字元,並以 o 結尾的字串
	reg = regexp.MustCompile(`[^ ]{1,4}o`)
	fmt.Printf("%q\n", reg.FindAllString(text, -1))
	// ["Hello" "Go"]

	// 查詢 Hello 或 Go
	reg = regexp.MustCompile(`(?:Hell|G)o`)
	fmt.Printf("%q\n", reg.FindAllString(text, -1))
	// ["Hello" "Go"]

	// 查詢 Hello 或 Go,替換為 Hellooo、Gooo
	reg = regexp.MustCompile(`(?PHell|G)o`)
	fmt.Printf("%q\n", reg.ReplaceAllString(text, "${n}ooo"))
	// "Hellooo 世界!123 Gooo."

	// 交換 Hello 和 Go
	reg = regexp.MustCompile(`(Hello)(.*)(Go)`)
	fmt.Printf("%q\n", reg.ReplaceAllString(text, "$3$2$1"))
	// "Go 世界!123 Hello."

	// 特殊字元的查詢
	reg = regexp.MustCompile(`[\f\t\n\r\v\123\x7F\x{10FFFF}\\\^\$\.\*\+\?\{\}\(\)\[\]\|]`)
	fmt.Printf("%q\n", reg.ReplaceAllString("\f\t\n\r\v\123\x7F\U0010FFFF\\^$.*+?{}()[]|", "-"))



  

相關推薦

go語言表達式-實踐教程

port ner 中文字符 正則表達式語法 hang ear 使用 獲取 rim 正則表達式處理使用到的庫 regexp 使用到regexp庫函數有 MustCompile 和 Compile MustCompile 的作用和 Compile 一樣, 將正則表達式編譯

go語言表示式regexp

2017年04月14日 15:26:30 龍嘯614 閱讀數:647 標籤: go語言 正則表示式

Go語言表示式

package main import "bytes" import "fmt" import "regexp" func main() { //這個測試一個字串是否符合一個表示式。 match

Go語言

單一匹配 . 匹配任意一個字元,如果設定 s = true,則可以匹配換行符 [字元類] 匹配“字元類”中的一個字元,“字元類”見後面的說明 [^字元類]

go regexp 表達式使用

!= 字符 color err gin lac print byte數組 dst go 正則表達式使用: /** * @Author: wsp * @Date: 2018/1/15 10:58 * @Description: */ package regexpStu

R語言-表達式1

查找 false substring [1] gre true span 正則表達式 開頭 R語言的正則表達式主要用來處理文本資料,比如進行查找、替換等等。 首先是一些處理文本時會用到的函數: 字符串分割:strsplit() 字符串連接:paste(),paste0()

各編程語言庫的小差別

結合 ora findall 遇到 找到 轉義符 hex tro 貪婪 個人筆記,不保證正確。 待完善。。 日常工作中能接觸到的正則,分為兩大派別,其中類 Unix 系統中常用的正則,屬於 POSIX “派”(較弱),而各編程語言標準庫中的 Re,基本都是 PCRE “

R語言表示式

R語言正則表示式 本文主要說明R語言的正則表示式,主要是一些簡單的函式和stringr包常用的方法 正則表示式通常被用來檢索、替換那些符合某個模式(規則)的文字。 一些R自帶的正則函式 grep,主要引數為匹配規則,待匹配的字串,返回向量中匹配成功的字串的下標 s<

C語言表示式詳解

標準的C和C++都不支援正則表示式,但有一些函式庫可以輔助C/C++程式設計師完成這一功能,其中最著名的當數Philip Hazel的Perl-Compatible Regular Expression庫,許多Linux發行版本都帶有這個函式庫。   C語言處理正則表示式常用的函

C語言表示式使用詳解

標準的C和C++都不支援正則表示式,但有正則表示式的函式庫提供這功能. C語言處理正則表示式常用的函式有regcomp()、regexec()、regfree()和regerror()。 使用正則表示式步驟: 1)編譯正則表示式 regcomp() 2)匹配正則表示式 re

JAVA語言表示式實現密碼規則設定

<span style="font-size:18px;">密碼規則:長度不能小於6位,必須包含字母和數字。</span>public void say() { Scann

C語言表示式的匹配問題

題目: C語言正則表示式詳解 regcomp() regexec() regfree()詳解。 背景: 標準的C和C++都不支援正則表示式,但有一些函式庫可以輔助C/C++程式設計師完成這一功能,其中最著名的當數Philip Hazel的Perl-Compatible Re

R語言-表示式

在R語言中使用正則表示式替換,可以使用sub()函式,用於全域性替換則用gsub()函式。 1、例子 假設有一個字串向量,需要將多位元組文字過濾出來: >a<-c("abc\x9422",'女','男','女') 如果直接對其使用大小寫轉換函式toupper()

Go語言表達式的使用

Go語言正則表達式 Go語言正則表達式的使用 Go語言 正則表達式 許多程序語言都支持使用正則表達式對字符串進行操作,Go語言也不例外,正則表達式的語法網上很多教程,本文主要介紹在Go語言中如何使用正則表達式,通過以下實例進行說明,並添加了詳細的註釋,不會的小夥伴一看就明白了。 func ma

Go語言表達式

GO 正則表達式 [TOC] Go語言正則表達式 方式一:使用Compile package main import ( "fmt" "regexp" ) const text = "my email is [email protected]" func main

Go語言表式之regexp包

compile mpi exp regexp ext4 ack fun () == 正則表達式都是大同小異,隨便寫幾個案例: // code_029_regexp project main.go package main import ( "fmt" "r

go語言表示式

go語言之正則表示式 //regexp package main import ( "fmt" "regexp" ) func main() { //需要匹配的模式 //reg := regexp.MustCompile("\\w+") 正則表示式中的\需要轉義

go語言表示式

go語言正則表示式(匹配中文/匹配漢字) regexp.Compile函式的用法 package main import ( "fmt" "regexp" ) func main() { reg, err := regexp.Compile("[a-z0-9#$%&

linux C語言處理表達式

man cte 得到 rsquo like pre 首地址 添加 有效 Linux下C語言處理正則表達式——regex.h 具體函數介紹 編譯正則表達式函數 int regcomp(regex_t *preg, const char *re

java語言中的----表達式

java語言中的正則表達式day14 java語言中的----正則表達式一、概述: 正則表達式在Java語言中也算是一個比較重要的模塊,前面我們學習了一些關於正則表達式的基礎,在登錄註冊功能中使用比較廣泛,所以說在這兒我就不做多余的介紹。下面我們就通過一些實例來了解一下正則表達式,二、正則表達式: