《Go语言从入门到精通》Go语言中的正则表达式_第1页
《Go语言从入门到精通》Go语言中的正则表达式_第2页
《Go语言从入门到精通》Go语言中的正则表达式_第3页
《Go语言从入门到精通》Go语言中的正则表达式_第4页
《Go语言从入门到精通》Go语言中的正则表达式_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Go语言中的正则表达式Go语言从入门到精通了解正则表达式的基本概念与用途了解正则表达式的一些进阶应用01REGEX02USAGE03ADVANCEDtarget目标掌握Go语言中正则表达式的常见用法目录导航8.1正则表达式的基本概念与用法Contents正则表达式的概念

并非一般表达计算过程的数学表达式表达一种字符串“匹配模式”(patternmatching)常用用途:判断某个字符串是否符合一定的规则从一个字符串中找出符合一定规则的子串用于替换寻找出的子串判断字符串是否含有符合一定规则的子串patternT

:=

"太*高兴"

s1

:=

"她真是太太太太太高兴了!"

matched,

errT

:=

regexp.MatchString(patternT,

s1)

if

errT

!=

nil

{

tools.Printfln("正则表达式匹配时发生错误:%v",

errT.Error())

return}

if

matched

{

tools.Printfln("字符串%#v中包含符合正则表达式%#v的子串。",

s1,

patternT)}

else

{

tools.Printfln("字符串%#v中不包含符合正则表达式%#v的子串。",

s1,

patternT)}从字符串中提取符合一定规则的子串patternT

:=

"太*高兴"

s1

:=

"她真是太太太太太高兴了!"

regexT,

errT

:=

regexp.Compile(patternT)

if

errT

!=

nil

{

t.Printfln("编译正则表达式时发生错误:%v",

errT.Error())

return}

matches

:=

regexT.FindAllString(s1,

-1)

t.Printfln("查找结果:%#v",

matches)用通配符“.”匹配任意字符regexT

:=

regexp.MustCompile("叫.*。")

s1

:=

"他的名字叫张小宝。"

s2

:=

"他的名字叫王小宝。"

t.Printfln("查找结果:%#v",

regexT.FindAllString(s1,

-1))

t.Printfln(“查找结果:%#v”,

regexT.FindAllString(s2,

-1))

贪婪与非贪婪匹配regexT

:=

regexp.MustCompile("真是太*")

t.Printfln("查找结果:%#v",

regexT.FindAllString("她真是太太太太太高兴了!",

-1))

regexT

=

regexp.MustCompile("真是太*?")

t.Printfln("查找结果:%#v",

regexT.FindAllString("她真是太太太太太高兴了!",

-1))分组提取子串regexT

:=

regexp.MustCompile("(.*?)的名字叫(.*?)。")

s

:=

"他的名字叫张小宝。他的名字叫马小宝。她的名字叫欧阳小宝。它的名字叫喵小宝。"

listT

:=

regexT.FindStringSubmatch(s)

t.Printfln("查找结果:%#v",

listT)

t.Printfln("%v叫%v",

listT[1],

listT[2])

提取所有符合条件的带捕获组的匹配结果regexT

:=

regexp.MustCompile("(.*?)的名字叫(.*?)。")

s

:=

"他的名字叫张小宝。他的名字叫马小宝。她的名字叫欧阳小宝。它的名字叫喵小宝。"

listT

:=

regexT.FindAllStringSubmatch(s,

-1)

t.Printfln("查找结果:%#v",

listT)

for

i,

v

:=

range

listT

{

t.Printfln("第%v组结果:%v叫%v",

i+1,

v[1],

v[2])}小提示:如果有第0组是指全部匹配的子串替换符合正则表达式的子串regexT

:=

regexp.MustCompile("重(.*?)公斤")

s

:=

"这个苹果重0.5公斤,那个橙子重0.6公斤。"

t.Printfln("第1次替换后结果:%#v",

regexT.ReplaceAllString(s,

"沉"))t.Printfln("第2次替换后结果:%#v",

regexT.ReplaceAllString(s,

"重$1"))t.Printfln("第3次替换后结果:%#v",

regexT.ReplaceAllString(s,

"重$1kg"))t.Printfln("第4次替换后结果:%#v",

regexT.ReplaceAllString(s,

"重${1}kg"))转义字符如果在正则表达式中需要表达“*”号、“?”号这些具有特殊含义的字符本身(而不是指任意次数或贪婪模式的指示符),需要用类似字符串中转义字符的方式来书写一般是在正则表达式中有特殊意义的字符前加反斜杠“\”,例如:\*、\?、\.等而“\”字符本身,则需要写成“\\”目录导航8.2正则表达式进阶知识Contents单个字符的表达匹配指定范围内的字符:[a-z0-9],匹配指定范围之外的字符:[^a-g苹果0-2\.]匹配数字或非数字的字符:\d

和\D匹配空白与非空白的字符:\s

和\S

其他一些字符匹配:\r、\n、\w、\W、\pN、\PN、\P{Han}表达字符出现的次数(数量)“+”表示字符至少出现1次:[a-g苹果0-2\.]+“*”表示字符出现0次或n次“?”表示字符出现0次或1次表示出现固定次数:“[an]{3}”表示匹配字符“a”或“n”连续出现3次的情况表示出现次数的范围:“[an]{2,5}”表示匹配字符“a”或“n”连续出现2次至5次的情况,默认按贪婪模式,非贪婪模式加“?”;可以省略其中一个数字,例如去掉5表示匹配2次以上的情况非字符匹配(位置匹配)

\A

与\z分别匹配字符串的开始与结尾,“\A.*\z”显然将匹配整个字符串,“\A[\s\S]*\z”将匹配包括换行符在内的整个字符串“\b”匹配单词边界“^”、“$”匹配字符串的开始与结束,多行模式下匹配行首与行尾使用标志位进行设置(?i)[a-n]+忽略大小写匹配(?s).+ .可以匹配换行符(?m)^.*$

多行模式可选子串匹配s

:=

"我们是工程师。你们是工程师。汤姆和汉森也是工程师。"

regexT

:=

regexp.MustCompile(`(我们|你们)是工程师`)

t.Printfln("查找结果:%#v",

regexT.FindAllStringSubmatch(s,

-1))

非捕获组s

:=

"我们是工程师。你们是工程师。汤姆和汉森也是工程师。"

regexT

:=

regexp.MustCompile(`(?:我们|你们)是工程师`)

t.Printfln("查找结果:%#v",

regexT.FindAllStringSubmatch(s,

-1))

获取匹配到子串的索引位置s

:=

"世界很大,世界也很小。"

regexT

:=

regexp.MustCompile(`很.`)

locationT

:=

regexT.FindStringIndex(s)

t.Printfln("查找结果:%#v",

locationT)

t.Printfln("子串内容:%#v",

s[locationT[0]:locationT[1]])

用正则表达式分割字符串s

:=

"世界很大,世界也很小。天涯才咫尺。"

regexT

:=

regexp.MustCompile(`[,。]`)

t.Printfln("分割结果:%#v",

regexT.Split(s,

-1))

判断整个字符串是否匹配正则表达式s

:=

"abc123xyz"

regexT

:=

regexp.MustCompile(`[a-z]+`)

t.Printfln("判断结果:%#v,匹配子串:%#v",

regexT.MatchString(s),

regexT.FindString(s))

regexT

=

regexp.MustCompile(`\A[a-z]+\z`)

t.Printfln("判断结果

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论