Golang正则表达式

也疯狂 · · 1275 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

语法规则

字符类匹配表达式
语法 说明 示例 匹配结果
一般 匹配本身 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)
// MatchString
func IsEmail(email string) bool {
    if email != "" {
        if isOk, _ := regexp.MatchString(EmailReg, email); isOk {
            return true
        }
    }
    return false
}
//Match
func IsEmailV2(email string) bool {
    if email != "" {
        if isOk, _ := regexp.Match(EmailReg, []byte(email)); isOk {
            return true
        }
    }
    return false
}
//MatchReader
func IsEmailV3(email string) bool {
    if email != "" {
        if isOk, _ := regexp.MatchReader(EmailReg, strings.NewReader(email)); isOk {
            return true
        }
    }
    return false
}
//MustCompile
func 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
}
//FindAllStringSubmatch
func 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满足条件的字串替换为repl
func 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正则表达式

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

1275 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传