8 11 Go語言正規表示式 regexp包

2021-10-07 06:13:35 字數 4082 閱讀 4045

正規表示式是一種進行模式匹配和文字操縱的複雜而又強大的工具。雖然正規表示式比純粹的文字匹配效率低,但是它卻更靈活,按照它的語法規則,根據需求構造出的正規表示式能夠從原始文字中篩選出幾乎任何你想要得到的字元組合。

go語言通過 regexp 包為正規表示式提供了官方支援,其採用 re2 語法,除了\c、\c外,go語言和 perl、python 等語言的正則基本一致。

正規表示式語法規則

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

下面的**中列舉了構成正規表示式的一些語法規則及其含義。

1) 字元

2) 數量詞(用在字元或 (…) 之後)

3) 邊界匹配

4) 邏輯、分組

5) 特殊構造(不作為分組)

regexp 包的使用

下面通過幾個示例來演示一下 regexp 包的使用。

【示例 1】匹配指定型別的字串。

package main

import

("fmt"

"regexp"

)func

main()

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

result1 := reg1.

findallstringsubmatch

(buf,-1

) fmt.

println

("result1 = "

, result1)

}

執行結果如下:

result1 =

[[abc]

[azc]

[a7c]

[aac]

[a9c]

]

【示例 2】匹配 a 和 c 中間包含乙個數字的字串。

package main

import

("fmt"

"regexp"

)func

main()

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

result1 := reg1.

findallstringsubmatch

(buf,-1

) fmt.

println

("result1 = "

, result1)

}

執行結果如下:

result1 =

[[a7c]

[a9c]

]

【示例 3】使用 \d 來匹配 a 和 c 中間包含乙個數字的字串。

package main

import

("fmt"

"regexp"

)func

main()

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

result1 := reg1.

findallstringsubmatch

(buf,-1

) fmt.

println

("result1 = "

, result1)

}

執行結果如下:

result1 =

[[a7c]

[a9c]

]

【示例 4】匹配字串中的小數。

package main

import

("fmt"

"regexp"

)func

main()

//提取關鍵資訊

//result := reg.findallstring(buf, -1)

result := reg.

findallstringsubmatch

(buf,-1

) fmt.

println

("result = "

, result)

}

執行結果如下:

result =[[

43.14][

1.23][

8.9]

[6.66][

7.8]

]

【示例 5】匹配 div 標籤中的內容。

package main

import

("fmt"

"regexp"

)func

main()

//提取關鍵資訊

result := reg.

findallstringsubmatch

(buf,-1

)//過濾<>

for_

, text :=

range result

}

執行結果如下:

text[1]

= go語言簡介

text[1]

= go語言基本語法

go語言變數的宣告

go語言教程簡明版

text[1]

= go語言容器

text[1]

= go語言函式

【示例 6】通過 compile 方法返回乙個 regexp 物件,實現匹配,查詢,替換相關的功能。

package main

import

("fmt"

"regexp"

"strconv"

)func

main()

if ok,

_:= regexp.

match

(pat,

byte

(searchin)

); ok

re,_:= regexp.

compile

(pat)

//將匹配到的部分替換為 "##.#"

str := re.

replaceallstring

(searchin,

"##.#"

) fmt.

println

(str)

//引數為函式時

str2 := re.

replaceallstringfunc

(searchin, f)

fmt.

println

(str2)

}

輸出結果:

match found!

john: ##.# william: ##.# steve: ##.#

john:

5156.68 william:

9134.46 steve:

11264.36

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

另外我們也可以使用 mustcompile 方法,它也可以像 compile 方法一樣檢驗正則的有效性,但是當正則不合法時程式將 panic。

go語言與正規表示式

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

Go語言正規表示式示例

複製 如下 package main import bytes import fmt import rwww.cppcns.comegexp func main 返回結果 true true peach 0 5 peach ea 0 5 1 3 peach punch pinch 0 5 1 3 6...

JavaScript中的正規表示式RegExp

正規表示式的兩種表示方法 字面量形式和建構函式形式 var reg cat g var reg new regexp cat g 可見無論哪一種方式都指明了正規表示式都由兩部分組成 模式和標誌。標誌分三種 g global i ignore m multiline global 匹配所有符合條件的字...