一尽超、郵箱
// gaozihang-001@gmail.com 只允許英文字母官撼、數(shù)字、下劃線似谁、英文句號傲绣、以及中劃線組成
^[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(.[a-zA-Z0-9_-]+)+$
// 高子航001Abc@bowbee.com.cn 名稱允許漢字、字母巩踏、數(shù)字秃诵,域名只允許英文域名
^[A-Za-z0-9u4e00-u9fa5]+@[a-zA-Z0-9_-]+(.[a-zA-Z0-9_-]+)+$
二、電話
// 13012345678 手機號
^1(3|4|5|6|7|8|9)d{9}$
// XXX-XXXXXXX XXXX-XXXXXXXX 固定電話
((d{3,4})|d{3,4}-|s)?d{8}
三塞琼、域名
// https://google.com/
^((http://)|(https://))?([a-zA-Z0-9]([a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?.)+[a-zA-Z]{2,6}(/)
四菠净、IP
// 127.0.0.1
((?:(?:25[0-5]|2[0-4]d|[01]?d?d).){3}(?:25[0-5]|2[0-4]d|[01]?d?d))
五、帳號校驗
// gaozihang_001 字母開頭彪杉,允許5-16字節(jié)毅往,允許字母數(shù)字下劃線
^[a-zA-Z][a-zA-Z0-9_]{4,15}$
六、字符校驗
// 高子航
^[u4e00-u9fa5]{0,}$
// 英文和數(shù)字
^[A-Za-z0-9]+$
// 長度為3-20的所有字符
^.{3,20}$
// 由26個英文字母組成的字符串
^[A-Za-z]+$
// 由26個大寫英文字母組成的字符串
^[A-Z]+$
// 由26個小寫英文字母組成的字符串
^[a-z]+$
// 由數(shù)字和26個英文字母組成的字符串
^[A-Za-z0-9]+$
// 由數(shù)字派近、26個英文字母或者下劃線組成的字符串
^w+$
// 中文攀唯、英文、數(shù)字包括下劃線
^[u4E00-u9FA5A-Za-z0-9_]+$
// 中文渴丸、英文侯嘀、數(shù)字但不包括下劃線等符號
^[u4E00-u9FA5A-Za-z0-9]+$
// 禁止輸入含有%&',;=?$"等字符
[^%&',;=?$x22]+
// 禁止輸入含有~的字符
[^~x22]+
七另凌、數(shù)字正則
// 整數(shù)
^-?[1-9]d*$
// 正整數(shù)
^[1-9]d*$
// 負整數(shù)
^-[1-9]d*$
// 非負整數(shù)
^[1-9]d*|0$
// 非正整數(shù)
^-[1-9]d*|0$
// 浮點數(shù)
^-?([1-9]d*.d*|0.d*[1-9]d*|0?.0+|0)$
// 正浮點數(shù)
^[1-9]d*.d*|0.d*[1-9]d*$
// 負浮點數(shù)
^-([1-9]d*.d*|0.d*[1-9]d*)$
// 非負浮點數(shù)
^[1-9]d*.d*|0.d*[1-9]d*|0?.0+|0$
// 非正浮點數(shù)
^(-([1-9]d*.d*|0.d*[1-9]d*))|0?.0+|0$
八、正則式規(guī)則介紹
// 單一
. 匹配任意一個字符残拐,如果設(shè)置 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 (優(yōu)先匹配 x)
// 重復
x* 匹配零個或多個 x醒叁,優(yōu)先匹配更多(貪婪)
x+ 匹配一個或多個 x司浪,優(yōu)先匹配更多(貪婪)
x? 匹配零個或一個 x,優(yōu)先匹配一個(貪婪)
x{n,m} 匹配 n 到 m 個 x把沼,優(yōu)先匹配更多(貪婪)
x{n,} 匹配 n 個或多個 x啊易,優(yōu)先匹配更多(貪婪)
x{n} 只匹配 n 個 x
x*? 匹配零個或多個 x,優(yōu)先匹配更少(非貪婪)
x+? 匹配一個或多個 x饮睬,優(yōu)先匹配更少(非貪婪)
x?? 匹配零個或一個 x租谈,優(yōu)先匹配零個(非貪婪)
x{n,m}? 匹配 n 到 m 個 x,優(yōu)先匹配更少(非貪婪)
x{n,}? 匹配 n 個或多個 x捆愁,優(yōu)先匹配更少(非貪婪)
x{n}? 只匹配 n 個 x
// 分組
(子表達式) 被捕獲的組割去,該組被編號 (子匹配)
(?P<命名>子表達式) 被捕獲的組,該組被編號且被命名 (子匹配)
(?:子表達式) 非捕獲的組 (子匹配)
(?標記) 在組內(nèi)設(shè)置標記昼丑,非捕獲呻逆,標記影響當前組后的正則表達式
(?標記:子表達式) 在組內(nèi)設(shè)置標記,非捕獲菩帝,標記影響當前組內(nèi)的子表達式
標記的語法是:
xyz (設(shè)置 xyz 標記)
-xyz (清除 xyz 標記)
xy-z (設(shè)置 xy 標記, 清除 z 標記)
可以設(shè)置的標記有:
i 不區(qū)分大小寫 (默認為 false)
m 多行模式:讓 ^ 和 $ 匹配整個文本的開頭和結(jié)尾页慷,而非行首和行尾(默認為 false)
s 讓 . 匹配 \n (默認為 false)
U 非貪婪模式:交換 x* 和 x*? 等的含義 (默認為 false)
// 位置標記
^ 如果標記 m=true 則匹配行首,否則匹配整個文本的開頭(m 默認為 false)
$ 如果標記 m=true 則匹配行尾胁附,否則匹配整個文本的結(jié)尾(m 默認為 false)
\A 匹配整個文本的開頭酒繁,忽略 m 標記
\b 匹配單詞邊界
\B 匹配非單詞邊界
\z 匹配整個文本的結(jié)尾,忽略 m 標記
// 轉(zhuǎn)義序列
\a 匹配響鈴符 (相當于 \x07)
注意:正則表達式中不能使用 \b 匹配退格符控妻,因為 \b 被用來匹配單詞邊界州袒,
可以使用 \x08 表示退格符。
\f 匹配換頁符 (相當于 \x0C)
\t 匹配橫向制表符(相當于 \x09)
\n 匹配換行符 (相當于 \x0A)
\r 匹配回車符 (相當于 \x0D)
\v 匹配縱向制表符(相當于 \x0B)
\123 匹配 8 進制編碼所代表的字符(必須是 3 位數(shù)字)
\x7F 匹配 16 進制編碼所代表的字符(必須是 3 位數(shù)字)
\x{10FFFF} 匹配 16 進制編碼所代表的字符(最大值 10FFFF )
\Q...\E 匹配 \Q 和 \E 之間的文本弓候,忽略文本中的正則語法
\\ 匹配字符 \
\^ 匹配字符 ^
\$ 匹配字符 $
\. 匹配字符 .
\* 匹配字符 *
\+ 匹配字符 +
\? 匹配字符 ?
\{ 匹配字符 {
\} 匹配字符 }
\( 匹配字符 (
\) 匹配字符 )
\[ 匹配字符 [
\] 匹配字符 ]
| 匹配字符 |
// 可以將“命名字符類”作為“字符類”的元素
[\d] 匹配數(shù)字 (相當于 \d)
[^\d] 匹配非數(shù)字 (相當于 \D)
[\D] 匹配非數(shù)字 (相當于 \D)
[^\D] 匹配數(shù)字 (相當于 \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 數(shù)字 (相當于 [0-9])
\D 非數(shù)字 (相當于 [^0-9])
\s 空白 (相當于 [\t\n\f\r ])
\S 非空白 (相當于[^\t\n\f\r ])
\w 單詞字符 (相當于 [0-9A-Za-z_])
\W 非單詞字符 (相當于 [^0-9A-Za-z_])
// “ASCII 類”取值如下
[:alnum:] 字母數(shù)字 (相當于 [0-9A-Za-z])
[:alpha:] 字母 (相當于 [A-Za-z])
[:ascii:] ASCII 字符集 (相當于 [\x00-\x7F])
[:blank:] 空白占位符 (相當于 [\t ])
[:cntrl:] 控制字符 (相當于 [\x00-\x1F\x7F])
[:digit:] 數(shù)字 (相當于 [0-9])
[:graph:] 圖形字符 (相當于 [!-~])
[:lower:] 小寫字母 (相當于 [a-z])
[:print:] 可打印字符 (相當于 [ -~] 相當于 [ [:graph:]])
[:punct:] 標點符號 (相當于 [!-/:-@[-反引號{-~])
[: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 私人使用區(qū) (private use)
Cs 代理區(qū) (surrogate)
L -字母- (letter)
Ll 小寫字母 (lowercase letter)
Lm 修飾字母 (modifier letter)
Lo 其它字母 (other letter)
Lt 首字母大寫字母 (titlecase letter)
Lu 大寫字母 (uppercase letter)
M -標記- (mark)
Mc 間距標記 (spacing mark)
Me 關(guān)閉標記 (enclosing mark)
Mn 非間距標記 (non-spacing mark)
N -數(shù)字- (number)
Nd 十進制數(shù)字 (decimal number)
Nl 字母數(shù)字 (letter number)
No 其它數(shù)字 (other number)
P -標點- (punctuation)
Pc 連接符標點 (connector punctuation)
Pd 破折號標點符號 (dash punctuation)
Pe 關(guān)閉的標點符號 (close punctuation)
Pf 最后的標點符號 (final punctuation)
Pi 最初的標點符號 (initial punctuation)
Po 其他標點符號 (other punctuation)
Ps 開放的標點符號 (open punctuation)
S -符號- (symbol)
Sc 貨幣符號 (currency symbol)
Sk 修飾符號 (modifier symbol)
Sm 數(shù)學符號 (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] 這樣的正則表達式夸研,如果要在 [] 中匹配 - 邦蜜,可以將 - 放在 [] 的開頭或結(jié)尾,例如 [-a-z] 或 [a-z-]
可以在 [] 中使用轉(zhuǎn)義字符:\f亥至、\t悼沈、\n、\r姐扮、\v絮供、\377、\xFF茶敏、\x{10FFFF}壤靶、\、\^惊搏、$贮乳、.、*恬惯、+塘揣、\?、{宿崭、}、(才写、)葡兑、[、]赞草、|(具體含義見上面的說明)
如果在正則表達式中使用了分組讹堤,則在執(zhí)行正則替換的時候,“替換內(nèi)容”中可以使用 1厨疙、{1}洲守、name、{name} 這樣的“分組引用符”獲取相應(yīng)的分組內(nèi)容沾凄。其中 0代表整個匹配項梗醇,1 代表第 1 個分組,$2 代表第 2 個分組撒蟀,……叙谨。
如果“分組引用符”是 name的形式,則在解析的時候保屯,name是取盡可能長的字符串手负,比如:1x 相當于 1x涤垫,而不是{1}x,再比如:10相當于{10}竟终,而不是 ${1}0蝠猬。
由于 字符會被轉(zhuǎn)義,所以要在“替換內(nèi)容”中使用 字符统捶,可以用 $ 代替榆芦。
上面介紹的正則表達式語法是“Perl 語法”,除了“Perl 語法”外瘾境,Go 語言中還有另一種“POSIX 語法”歧杏,“POSIX 語法”除了不能使用“Perl 類”之外,其它都一樣迷守。
// 示例
// 查找連續(xù)的小寫字母
reg := regexp.MustCompile(`[a-z]+`)
fmt.Printf("%q\n", reg.FindAllString(text, -1))
// ["ello" "o"]
// 查找連續(xù)的非小寫字母
reg = regexp.MustCompile(`[^a-z]+`)
fmt.Printf("%q\n", reg.FindAllString(text, -1))
// ["H" " 世界犬绒!123 G" "."]
// 查找連續(xù)的單詞字母
reg = regexp.MustCompile(`[\w]+`)
fmt.Printf("%q\n", reg.FindAllString(text, -1))
// ["Hello" "123" "Go"]
// 查找連續(xù)的非單詞字母、非空白字符
reg = regexp.MustCompile(`[^\w\s]+`)
fmt.Printf("%q\n", reg.FindAllString(text, -1))
// ["世界兑凿!" "."]
// 查找連續(xù)的大寫字母
reg = regexp.MustCompile(`[[:upper:]]+`)
fmt.Printf("%q\n", reg.FindAllString(text, -1))
// ["H" "G"]
// 查找連續(xù)的非 ASCII 字符
reg = regexp.MustCompile(`[[:^ascii:]]+`)
fmt.Printf("%q\n", reg.FindAllString(text, -1))
// ["世界凯力!"]
// 查找連續(xù)的標點符號
reg = regexp.MustCompile(`[\pP]+`)
fmt.Printf("%q\n", reg.FindAllString(text, -1))
// ["!" "."]
// 查找連續(xù)的非標點符號字符
reg = regexp.MustCompile(`[\PP]+`)
fmt.Printf("%q\n", reg.FindAllString(text, -1))
// ["Hello 世界" "123 Go"]
// 查找連續(xù)的漢字
reg = regexp.MustCompile(`[\p{Han}]+`)
fmt.Printf("%q\n", reg.FindAllString(text, -1))
// ["世界"]
// 查找連續(xù)的非漢字字符
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 開頭咐鹤,以空格結(jié)尾的字符串
reg = regexp.MustCompile(`^H.*\s`)
fmt.Printf("%q\n", reg.FindAllString(text, -1))
// ["Hello 世界!123 "]
// 查找行首以 H 開頭圣絮,以空白結(jié)尾的字符串(非貪婪模式)
reg = regexp.MustCompile(`(?U)^H.*\s`)
fmt.Printf("%q\n", reg.FindAllString(text, -1))
// ["Hello "]
// 查找以 hello 開頭(忽略大小寫)祈惶,以 Go 結(jié)尾的字符串
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."]
// 查找從行首開始扮匠,以空格結(jié)尾的字符串(非貪婪模式)
reg = regexp.MustCompile(`(?U)^.* `)
fmt.Printf("%q\n", reg.FindAllString(text, -1))
// ["Hello "]
// 查找以空格開頭捧请,到行尾結(jié)束,中間不包含空格字符串
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"]
// 查找連續(xù) 1 次到 4 次的非空格字符疹蛉,并以 o 結(jié)尾的字符串
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\\^$.*+?{}()[]|", "-"))
// "----------------------"
九克蚂、在線正則測試
十闺鲸、轉(zhuǎn)載
https://github.com/cdoco/common-regex
https://blog.csdn.net/zfy1355/article/details/52959803