正規表示式是一種進行模式匹配和文字操縱的複雜而又強大的工具。雖然正規表示式比純粹的文字匹配效率低,但是它卻更靈活。按照它的語法規則,隨需構造出的匹配模式就能夠從原始文字中篩選出幾乎任何你想要得到的字元組合。
go語言通過regexp標準包為正規表示式提供了官方支援,如果你已經使用過其他程式語言提供的正則相關功能,那麼你應該對go語言版本的不會太陌生,但是它們之間也有一些小的差異,因為go實現的是re2標準,除了\c。
其實字串處理我們可以使用strings包來進行搜尋(contains、index)、替換(replace)和解析(split、join)等操作,但是這些都是簡單的字串操作,他們的搜尋都是大小寫敏感,而且固定的字串,如果我們需要匹配可變的那種就沒辦法實現了,當然如果strings包能解決你的問題,那麼就盡量使用它來解決。因為他們足夠簡單、而且效能和可讀性都會比正則好。
詳細請參考官方文件
1. 匹配任意型別
buf :=
"abc azc a7c aac 888 a9c tac"
// 1. 解釋規則
reg := regexp.
mustcompile
(`a.c`
)// 這裡會解析正規表示式,成功就返回直譯器(. ——> 除\n外任意字元)
if reg ==
nil// 2. 根據規則提取關鍵資訊
res := reg.
findallstringsubmatch
(buf,-1
)//-1表示匹配所有的
// res := reg.findallstringsubmatch(buf, 1) //1表示匹配乙個
fmt.
println
("res = "
, res)
執行結果:
res =
[[abc]
[azc]
[a7c]
[aac]
[a9c]
]
2. 使用 […] (字符集) 匹配[0-9]之間的數值buf :=
"abc azc a7c aac 888 a9c tac"
//1) 解釋規則, 它會解析正規表示式,如果成功返回直譯器
reg1 := regexp.
mustcompile
(`a[0-9]c`
)if reg1 ==
nil//2) 根據規則提取關鍵資訊
result1 := reg1.
findallstringsubmatch
(buf,-1
) fmt.
println
("result1 = "
, result1)
執行結果:
result1 =
[[a7c]
[a9c]
]
3. 使用 \d 匹配[0-9]之間的數值buf :=
"abc azc a7c aac 888 a9c tac"
//1) 解釋規則, 它會解析正規表示式,如果成功返回直譯器
reg1 := regexp.
mustcompile
(`a\dc`
)if reg1 ==
nil//2) 根據規則提取關鍵資訊
result1 := reg1.
findallstringsubmatch
(buf,-1
) fmt.
println
("result1 = "
, result1)
執行結果:
result1 =
[[a7c]
[a9c]
]
4.匹配小數buf :=
"3.14 456 adsc as23d 1.23 3. 9.99 1lsa23d 0.08 0.00 "
// 解釋正規表示式
reg := regexp.
mustcompile
(`\d+\.\d+`
)// +表示匹配前乙個字元的一次或者多次
if reg ==
nil// 提取關鍵資訊
res := reg.
findallstringsubmatch
(buf,-1
) fmt.
println
("res = "
, res)
執行結果:
res =[[
3.14][
1.23][
9.99][
0.08][
0.00
]]
5.匹配資訊中某關鍵字並過濾帶標籤的// ` ` 是原生字串
buf :=
`
和愛好哈哈 你在嗎
不在測試你過來啊
`// 解釋正規表示式
reg := regexp.
mustcompile
(`(?s:(.*?))`)
// s用來處理換**況
if reg ==
nil// 提取關鍵字
res := reg.
findallstringsubmatch
(buf,-1
)// fmt.println("res = ", res)
// 過濾<>
for_
, text :=
range res
執行結果:
text[1]
= 和愛好
text[1]
= 哈哈
你在嗎不在
text[1]
= 測試
text[1]
= 你過來啊
Golang 正規表示式
常用語法 golang of regexp 匹配任意換行符以外的任意字元 w 匹配字母 下劃線 漢字 數字 s 匹配任意的空白符 d 匹配數字 b 匹配單詞的開始或結束 匹配字串的開始 匹配字串的結束 重複零次或更多次 重複一次或更多次 重複零次或一次 重複n次 重複n次或更多次 重複n,m次之間 ...
golang正規表示式
今天用原生的go嘗試寫了下爬取頁面資料,並正則匹配需要的資料。邏輯比較簡單,就是啟動了幾十個協程進行頁面爬取,然後進行正則匹配。匹配除換行符以外的任意字元,要匹配換行可以用 s s d d w w 進行匹配 匹配除換行符以外的任意字元 w 匹配字母或數字或下劃線或漢字 等價於 a za z0 9 s...
正規表示式 正規表示式 總結
非負整數 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...