您的位置 首页 > 数码极客

〈正则表达式如何引入〉正则表达式如何取反!

一、简介

这里介绍在go中使用正则表达式。

二、知识点

2.1 正则表达式模块regexp

go中正则表达式依赖模块为regexp,编码中引入示例如下:

import (

"regexp"

)

2.1 预编译语法

go中正则表达式依赖模块为regexp,正则表达式预编译方法主要有:Compile、MustCompile、CompilePOSIX、MustCompilePOSIX。

2.1.1 Compile

Compile方法,返回结果包含err字段,采用最左最短方式搜索,源码定义如下:

func Compile(expr string) (*Regexp, error) {}

使用示例:

reg, _ := regexp.Compile(`<.*?>`)

2.1.2 MustCompile

MustCompile同Compile一样,只是返回结果没有err字段,出错时直接抛异常,源码定义如下:

func MustCompile(str string) *Regexp {}

使用示例:

mustReg := regexp.MustCompile(`<.*?>`)

2.1.3 CompilePOSIX

CompilePOSIX同Compile类似,预编译正则表达式,采用posix语法,最左最长方式搜索,不支持\w,\W等perl写法,源码定义如下:

func CompilePOSIX(expr string) (*Regexp, error) {}

使用示例:

posixReg, _ := regexp.CompilePOSIX(`<.*?>`)

2.1.4 MustCompilePOSIX

MustCompilePOSIX同CompilePOSIX类似,只是返回结果没有err字段,出错时直接抛异常,源码定义如下:

func MustCompilePOSIX(str string) *Regexp {}

使用示例:

mustPosixReg, _ := regexp.MustCompilePOSIX(`<.*?>`)

三、使用示例

go正则表达式常用有匹配判断、查找、分组、替换。下面分别介绍。 测试串定义为:

text := "<p>apple study hard ,好好学习, 11 2333 33 study, good,天天向上 study 1243 53, </p>"

3.1 匹配判断

匹配判断使用Match方法或MatchString方法,两者区别仅是Match参数为字节类型,MatchString为字符串类型。使用示例:

//匹配,参数为字符串

matchResult,_ := regexp.MatchString("study", text)

(matchResult) //true

//匹配,参数为[]byte

byteMatchResult,_ := regexp.Match(`\d+`, []byte(text))

(byteMatchResult) //true

3.2 查找

查找主要方法有FindString、FindAllString、FindStringIndex,使用示例如下:

//查询所有,指定参数最多查询个数为2, 负数表示查所有,如-1

queryAllResult := regexp.MustCompilePOSIX(`study`).FindAllString(text, 2)

(queryAllResult) //[study study]

//查询第一个匹配字符串

queryResult := regexp.MustCompile("study").FindString(text)

(queryResult) //study

//最短匹配

shortTxt := regexp.MustCompile(`st|study`).FindString(text)

(shortTxt) //st

//最长匹配

longTxt := regexp.MustCompilePOSIX(`st|study`).FindString(text)

(longTxt) //study

//查询匹配串位置

findIdxResult := regexp.MustCompile(`study`).FindStringIndex(text)

println(findIdxResult)

//Unicode使用,如\p{Han}表示中文

hanResult := regexp.MustCompile(`[\p{Han}]+`).FindString(text)

println(hanResult) //好好学习

//非贪婪,添加标识?

notGreedyResult := regexp.MustCompile(`\d+?3`).FindString(text)

println(notGreedyResult) //23

//贪婪

greedyResult := regexp.MustCompile(`\d+3`).FindString(text)

println(greedyResult) //2333

//分组

groupResult := regexp.MustCompile(`(\d+)\s+(\d+)`).FindString(text)

println(groupResult) //11 2333

//分组打标签

tagGroupResult := regexp.MustCompile(`(?P<tagName_1>\d+)\s+(?P<tagName_2>\d+)`).FindString(text)

println(tagGroupResult) //11 2333

//非贪婪模式标识:(?U),切换为贪婪模式用方法Longest

notGreedyReg := regexp.MustCompile(`(?U)\d+3`)

notGreedyResult := no(text)

println(notGreedyResult) //23

//通过方法Longest转为贪婪模式

no()

changeGreedyResult := no(text)

println(changeGreedyResult) //2333

//贪婪模式,不带标识(?U)

greedyResult := regexp.MustCompile(`\d+3`).FindString(text)

println(greedyResult)//2333

3.3 替换

替换主要方法有ReplaceAllString、ReplaceAllStringFunc,其中ReplaceAllStringFunc表示使用自定义方法定义替换规则。使用示例如下:

//自定义替换规则函数

func updateDisplose(text string) string{

if (text, "5"){

return text+"++"

}

return text

}

//替换

updateResult := regexp.MustCompile("<.*?>").ReplaceAllString(text, "")

(updateResult) //apple study hard ,好好学习, 11 2333 33 study, good,天天向上 study 1243 53,

//替换,使用函数指定替换规则

updateFuncResult := regexp.MustCompile(`\d+`).ReplaceAllStringFunc(text, updateDisplose)

println(updateFuncResult) //<p>apple study hard ,好好学习, 11 2333 33 study, good,天天向上 study 1243 53++, </p>

//分组查找替换

expandReg := regexp.MustCompile(`(\w+).*(\d+)`)

template := "hello $1, study $2"

//dst := "info:"

//subMatchIdx := ex(text)

//expandResult :=ex([]byte(dst), template, text, subMatchIdx)

expandResult :=ex(nil, template, text, ex(text))

("%s\n", expandResult) //hello p, study 3

四、备注

正则表达式语法在各语言中写法是一致的,具体写法在此略过,更多操作请相看go源码或api文档。

4.1 相关参与地址

正则表达式关于unicode编码参考地址:

posixy语法参考地址:

责任编辑: 鲁达

1.内容基于多重复合算法人工智能语言模型创作,旨在以深度学习研究为目的传播信息知识,内容观点与本网站无关,反馈举报请
2.仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证;
3.本站属于非营利性站点无毒无广告,请读者放心使用!

“正则表达式如何引入,正则表达式如何取反,正则表达式如何运用,正则表达式如何使用,正则表达式如何替换,正则表达式如何匹配”边界阅读