您的位置 首页 golang

Golang正则表达式


语法规则

字符类匹配表达式
语法 说明 示例 匹配结果
一般 匹配本身 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

关于作者: 智云科技

热门文章

发表评论

您的电子邮箱地址不会被公开。

网站地图