您的位置 首页 golang

Golang正则表达式


语法规则

字符类匹配表达式
语法说明示例匹配结果
一般匹配本身abcabc
.匹配任意除换行符"\n"外的字符a.cabc
\转义字符,使后一个字符改变原来的意思a\.ca.c
[...]字符集(字符类),对应的位置可以是字符集中任意字符[abc]。也可以给出范围[a-c],第一个字符如果是 ^ 则表示取反,如 [^abc] 表示除了abc之外的其他字符。a[bcd]eabe,ace,ade
\d数字:[0-9]a\dca1c
\D非数字:[^\d]a\Dcabc
\s空白字符:[<空格>\t\r\n\f\v]a\sca c
\S非空白字符:[^\s]a\Scabc
\w单词字符:[A-Za-z0-9]a\wcabc
\W非单词字符:[^\w]a\Wca c
数量词表达式
语法说明示例匹配结果
*匹配前一个字符 0 或无限次abc*abc,ab,abccc
+匹配前一个字符 1 次或无限次abc+abc,abcc
?匹配前一个字符 0 次或 1 次abc?abc,ab
{m}匹配前一个字符 m 次ab{2}cabbc
{m,n}匹配前一个字符 m 至 n 次,m 和 n 可以省略,若省略 m,则匹配 0 至 n 次;若省略 n,则匹配 m 至无限次ab{1,2}cabc,abbc
边界匹配
语法说明示例匹配结果
^匹配字符串开头,在多行模式中匹配每一行的开头^abcabc
$匹配字符串末尾,在多行模式中匹配每一行的末尾abc$abc
\A仅匹配字符串开头\Aabcabc
\Z仅匹配字符串末尾abc\Zabc
\b匹配 \w 和 \W 之间a\b!bca!bc
\B[^\b]a\Bbcabc
分组
语法说明示例匹配结果
代表左右表达式任意匹配一个,优先匹配左边的表达式abc|defabc 或者 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

关于作者: 智云科技

热门文章

网站地图