语法规则
字符类匹配表达式
语法 | 说明 | 示例 | 匹配结果 |
---|
一般 | 匹配本身 | abc | abc |
. | 匹配任意除换行符"\n"外的字符 | a.c | abc |
\ | 转义字符,使后一个字符改变原来的意思 | 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* | abc,ab,abccc |
+ | 匹配前一个字符 1 次或无限次 | abc+ | abc,abcc |
? | 匹配前一个字符 0 次或 1 次 | abc? | abc,ab |
{m} | 匹配前一个字符 m 次 | ab{2}c | abbc |
{m,n} | 匹配前一个字符 m 至 n 次,m 和 n 可以省略,若省略 m,则匹配 0 至 n 次;若省略 n,则匹配 m 至无限次 | ab{1,2}c | abc,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){2} | abcabc |
验证
const EmailReg = `^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$`var EmailRegCompile *regexp.Regexp = regexp.MustCompile(EmailReg)// MatchStringfunc IsEmail(email string) bool { if email != "" { if isOk, _ := regexp.MatchString(EmailReg, email); isOk { return true } } return false}//Matchfunc IsEmailV2(email string) bool { if email != "" { if isOk, _ := regexp.Match(EmailReg, []byte(email)); isOk { return true } } return false}//MatchReaderfunc IsEmailV3(email string) bool { if email != "" { if isOk, _ := regexp.MatchReader(EmailReg, strings.NewReader(email)); isOk { return true } } return false}//MustCompilefunc IsEmailV5(email string) bool { //return EmailRegComplie.Match([]byte(email)) //return EmailRegComplie.MatchReader(strings.NewReader(email)) return EmailRegCompile.MatchString(email)}
查找
const NumberReg = `[0-9]*`var NumberRegCompile *regexp.Regexp = regexp.MustCompile(NumberReg)const HrefReg = `<a href="(https://so.gushiwen.org/gushi/[a-z]+\.aspx)" target="_blank"[^>]*>([^<]+)</a>`var HrefRegCompile *regexp.Regexp = regexp.MustCompile(HrefReg)//FindString|Find : 查找第一个满足条件的值func FindString(str string) string { //return string(NumberRegCompile.Find([]byte(str))) return NumberRegCompile.FindString(str)}//FindAllString :查找所有满足条件的值func FindAll(str string) []string { return NumberRegCompile.FindAllString(str, -1)}//FindAll:查找所有满足条件的值func FindAllByte(str string) []string { var strSlice []string matchs := NumberRegCompile.FindAll([]byte(str), -1) for _, match := range matchs { strSlice = append(strSlice, string(match)) } return strSlice}//FindAllStringSubmatchfunc FindAllStringSubMatch(str string) [][]string { return HrefRegCompile.FindAllStringSubmatch(str, -1)}
替换
const ( NumberReg = `[0-9]*` StringReg = `[a-z][A-Z]*`)var ( NumberRegCompile *regexp.Regexp = regexp.MustCompile(NumberReg) StringRegCompile *regexp.Regexp = regexp.MustCompile(StringReg))//ReplaceAllString|ReplaceAll :把src满足条件的字串替换为replfunc ReplaceAll(src, repl string) string { //return NumberRegCompile.ReplaceAllString(src, repl) return string(NumberRegCompile.ReplaceAll([]byte(src), []byte(repl)))}//ReplaceAllStringFunc|ReplaceAllFunc :把src满足条件的字串用函数处理func ReplaceAllStringFunc(src string) string { //return string(NumberRegCompile.ReplaceAllFunc([]byte(src), bytes.ToUpper)) return NumberRegCompile.ReplaceAllStringFunc(src, strings.ToUpper)}
文章来源:智云一二三科技
文章标题:Golang正则表达式
文章地址:https://www.zhihuclub.com/534.shtml