根據需求構造出想要得到的字元組合
組成:
由普通字元(例如字元a
到z
)以及特殊字元(稱為"元字元")構成的文字序列,可以是單個的字元、字元集合、字元範圍、字元間的選擇或者所有這些元件的任意組合。
字元語法
說明表示式示例
匹配結果
一般字元
匹配自身
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匹配 a 和 c 中間包含乙個數字的字串:--->使用字符集匹配import (
"fmt"
"regexp")
/*使用regexp包下的函式進行指定型別字串的匹配
*/func main()
// 根據正則規則提取關鍵資訊
result1 := regeno1.findallstringsubmatch(buf, -1)
fmt.println("結果為:", result1)
}
package main使用import (
"fmt"
"regexp")
/*使用regexp包下的函式進行指定型別字串的匹配
*/func main()
// 根據正則規則提取關鍵資訊
result1 := regeno1.findallstringsubmatch(buf, -1)
fmt.println("結果為:", result1)
}
\d
來匹配a
和c
中間包含乙個數字的字串:
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 mainimport (
"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...