2 17 Go之正規表示式 regexp包

2022-09-27 12:06:10 字數 4338 閱讀 6768

根據需求構造出想要得到的字元組合

組成:

由普通字元(例如字元az)以及特殊字元(稱為"元字元")構成的文字序列,可以是單個的字元、字元集合、字元範圍、字元間的選擇或者所有這些元件的任意組合。

字元語法

說明表示式示例

匹配結果

一般字元

匹配自身

abcabc

.匹配任意除換行符"\n"外的字元, 在 dotall 模式中也能匹配換行符

a.cabc

\轉義字元,使後乙個字元改變原來的意思; 如果字串中有字元 * 需要匹配,可以使用 *或者字符集[*]。

a.c a\c

a.c a\c

[...]

字符集(字元類),對應的位置可以是字符集中任意字元。 字符集中的字元可以逐個列出,也可以給出範圍,如 [abc] 或 [a-c], 第乙個字元如果是 ^ 則表示取反,如 abc表示除了abc之外的其他字元。

a[bcd]e

abe 或 ace 或 ade

\d數字:[0-9]

a\dc

a1c\d

非數字:[ ^\d ]

a\dc

abc\s

空白字元:[《空格》\t\r\n\f\v]

a\sc

a c\s

非空白字元:[ ^\s ]

a\sc

abc\w

單詞字元:[a-za-z0-9]

a\wc

abc\w

非單詞字元:[ ^\w ]

a\wc

a c數量詞(用在字元或(...)之後)

語法說明

表示式示例

匹配結果

*匹配前乙個字元 0 或無限次

abc*

ab 或 abccc

+匹配前乙個字元 1 次或無限次

abc+

abc 或 abccc

?匹配前乙個字元 0 次或 1 次

abc?

ab 或 abc

匹配前乙個字元 m 次

abcabbc

匹配前乙個字元 m 至 n 次,m 和 n 可以省略,若省略 m,則匹配 0 至 n 次; 若省略 n,則匹配 m 至無限次

abcabc 或 abbc

邊界匹配

語法說明

表示式示例

匹配結果

^匹配字串開頭,在多行模式中匹配每一行的開頭

^abc

abc$

匹配字串末尾,在多行模式中匹配每一行的末尾

abc$

abc\a

僅匹配字串開頭

\aabc

abc\z

僅匹配字串末尾

abc\z

abc\b

匹配 \w 和 \w 之間

a\b!bc

a!bc

\b[^\b]

a\bbc

abc邏輯、分組

語法說明

表示式示例

匹配結果

||代表左右表示式任意匹配乙個,優先匹配左邊的表示式

abc|def

abc 或 def

(...)

括起來的表示式將作為分組,分組將作為乙個整體,可以後接數量詞

(abc)

abcabc

(?p...)

分組,功能與 (...) 相同,但會指定乙個額外的別名

(?pabc)

abcabc

引用編號為 的分組匹配到的字串

(\d)abc\1

1abe1 或 5abc5

(?p=name)

引用別名為 的分組匹配到的字串

(?p\d)abc(?p=id)

1abe1 或 5abc5

特殊構造(不作為分組)

語法說明

表示式示例

匹配結果

(?:...)

(…) 的不分組版本,用於使用 "|" 或後接數量詞

(?:abc)

abcabc

(?ilmsux)

ilmsux 中的每個字元代表一種匹配模式,只能用在正規表示式的開頭,可選多個

(?i)abc

abc(?#...)

# 後的內容將作為注釋被忽略。

abc(?#comment)123

abc123

(?=...)

之後的字串內容需要匹配表示式才能成功匹配

a(?=\d)

後面是數字的 a

(?!...)

之後的字串內容需要不匹配表示式才能成功匹配

a(?!\d)

後面不是數字的 a

(?<=...)

之前的字串內容需要匹配表示式才能成功匹配

(?<=\d)a

前面是數字的a

(?之前的字串內容需要不匹配表示式才能成功匹配

(?前面不是數字的a

匹配指定型別的字串:--->應用了字元匹配的.

package main

​import (

"fmt"

"regexp")​

/*使用regexp包下的函式進行指定型別字串的匹配

*/func main()

​// 根據正則規則提取關鍵資訊

result1 := regeno1.findallstringsubmatch(buf, -1)

fmt.println("結果為:",  result1)

}

匹配 a 和 c 中間包含乙個數字的字串:--->使用字符集匹配

package main

​import (

"fmt"

"regexp")​

/*使用regexp包下的函式進行指定型別字串的匹配

*/func main()

​// 根據正則規則提取關鍵資訊

result1 := regeno1.findallstringsubmatch(buf, -1)

fmt.println("結果為:",  result1)

}

使用\d來匹配ac中間包含乙個數字的字串:

package main

​import (

"fmt"

"regexp")​

/*使用regexp包下的函式進行指定型別字串的匹配

*/func main()

​// 根據正則規則提取關鍵資訊

result1 := regeno1.findallstringsubmatch(buf, -1)

fmt.println("結果為:",  result1)

}

匹配div標籤中的內容:

package main

​import (

"fmt"

"regexp")​

/*匹配標籤中的內容

*/func main()

​// 提取關鍵資訊

result := reg.findallstringsubmatch(buf, -1)

​// 過濾掉<>和

for _, text := range result

}

通過compile方法返回乙個regexp

package main

​import (

"fmt"

"regexp"

"strconv")​

/*獲取regexp物件,實現匹配、查詢、替換等功能

*/func main()

​// 使用math包下的函式匹配提供的目標串

if ok, _ := regexp.match(pat, byte(searchin)); ok

​// 獲取compile物件

re, _ := regexp.compile(pat)

​// 將匹配部分替換為"**.*"

str := re.replaceallstring(searchin, "**.*")

fmt.println(str)

​// 引數為函式時替換為函式處理的結果

res := re.replaceallstringfunc(searchin, f)

fmt.println(res)

}

compile方法可以解析並返回乙個正規表示式,如果成功返回,則說明該正規表示式正確可用於匹配文字

正規表示式 正規表示式 總結

非負整數 d 正整數 0 9 1 9 0 9 非正整數 d 0 負整數 0 9 1 9 0 9 整數 d 非負浮點數 d d 正浮點數 0 9 0 9 1 9 0 9 0 9 1 9 0 9 0 9 0 9 1 9 0 9 非正浮點數 d d 0 0 負浮點數 正浮點數正則式 英文本串 a za z...

2020 02 07 GO 正規表示式

1.匹配 import fmt regexp 查詢整個字串中所有連續的3個數字 reg regexp.mustcompile d match reg.findallstringsubmatch aaa111bbb222ccc333 1 for i,v range match 結果 i 0 v 111...

go語言與正規表示式

編譯解析正規表示式 func mustcompile str string regexp返回值 編譯後,go語言能夠識別出來的乙個正規表示式結構體 利用正則從字串中提取有用資訊 func re regexp findallstringsubmatch s string n int string de...