非零基础自学Golang 第16章 正则表达式 16.3 regexp包 16.4 小结 16.5 知识拓展

news2024/11/24 12:44:08

非零基础自学Golang

文章目录

      • 非零基础自学Golang
      • 第16章 正则表达式
        • 16.3 regexp包
          • 16.3.1 MatchString函数
          • 16.3.2 FindStringIndex函数
          • 16.3.3 ReplaceAllString函数
        • 16.4 小结
        • 16.5 知识拓展
          • 16.5.1 常用正则表达式参考

第16章 正则表达式

16.3 regexp包

Go在处理正则表达式时主要使用regexp包,包中实现了正则表达式的查找、替换和模式匹配功能。

16.3.1 MatchString函数

MarchString函数接收一个要查找的正则表达式和目标字符串,并根据匹配结果返回true或false,函数定义如下:

func MatchString(pattern string, s string) (matched bool, err error)

对于目标字符串“hello world”,我们通过MatchString函数匹配其中的“hello”字符串,并返回匹配结果:

[ 动手写 16.3.1]

package main

import (
   "fmt"
   "regexp"
)

func main() {

   targetString := "hello world"
   matchString := "hello"

   match, err := regexp.MatchString(matchString, targetString)

   if err != nil {
      fmt.Println(err)
   }
   fmt.Println(match)
}

运行结果

在这里插入图片描述

程序执行结果表明匹配成功。那么,如果我们把目标字符串改为“Hello world”,匹配是否会成功呢?

[ 动手写16.3.2 ]

package main

import (
   "fmt"
   "regexp"
)

func main() {

   targetString := "Hello world"
   matchString := "hello"

   match, err := regexp.MatchString(matchString, targetString)

   if err != nil {
      fmt.Println(err)
   }
   fmt.Println(match)
}

运行结果

在这里插入图片描述

匹配结果显示失败了,由于正则表达式区分大小写,如果要以不区分大小写的方式查找,必须修改正则表达式,使用一种特殊的语法:

matchString := "(?i)hello"

字符串开头的语法让正则表达式匹配时不区分大小写,运行修改后的示例,结果为true。

[ 动手写 16.3.3 ]

package main

import (
   "fmt"
   "regexp"
)

func main() {

   targetString := "Hello world"
   matchString := "(?i)hello"

   match, err := regexp.MatchString(matchString, targetString)

   if err != nil {
      fmt.Println(err)
   }
   fmt.Println(match)
}

运行结果

在这里插入图片描述

没毛病。

16.3.2 FindStringIndex函数

FindStringIndex函数接收一个目标字符串,并返回第一个匹配的起始位置和结束位置,函数定义如下:

func (re *Regexp) FindStringIndex(s string) (loc []int)

由于FindStringIndex函数是Regexp结构体的成员函数,需要对正则表达式进行编译,编译成功后方能使用。

通常使用Compile或MustCompile函数进行编译。

  1. Compile函数:若正则表达式未通过编译,则返回错误。
  2. MustCompile函数:若正则表达式未通过编译,则引发panic。

对于目标字符串“hello world”,我们通过FindStringIndex函数匹配其中的“hello”字符串对应的起始和结束位置:

[ 动手写 16.3.4]

package main

import (
   "fmt"
   "regexp"
)

func main() {

   targetString := "hello world"
   re := regexp.MustCompile(`(\w)+`)

   res := re.FindStringIndex(targetString)
   fmt.Println(res)
}

运行结果

在这里插入图片描述

16.3.3 ReplaceAllString函数

ReplaceAllString函数返回第一个参数的拷贝,将第一个参数中所有re的匹配结果都替换为repl,函数定义如下:

func (re *Regexp) ReplaceAllString(src, repl string) string

同样对于目标字符串“hello world”,我们通过ReplaceAllString函数匹配其中的“o”字符并将其替换为“O”:

[ 动手写 16.3.5]

package main

import (
   "fmt"
   "regexp"
)

func main() {

   targetString := "hello world"
   re := regexp.MustCompile(`o`)

   res := re.ReplaceAllString(targetString, "O")
   fmt.Println(res)
}

运行结果

在这里插入图片描述

没毛病。

16.4 小结

  • 正则表达式是符合一定规则的表达式,用于匹配字符串中字符组合的模式。
  • 正则表达式的设计思想就是使用一些描述性的符号和文字为字符串定义一个规则。凡是符合这个规则的,程序就认为文本是“匹配”的,否则就认为文本是“不匹配”的。
  • Go在处理正则表达式时主要使用regexp包,包中实现了正则表达式的查找、替换和模式匹配功能。

16.5 知识拓展

16.5.1 常用正则表达式参考

【1】E-mail 地址

^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$

【2】URL 地址

^(https?:\/\/)?([\da-z.-]+)\.([a-z.]{2,6})([\/\w .-])\/?$

【3】匹配首尾空白字符的正则表达式

^\s|\s$

【4】手机号码

^(13[0-9]|14[0-9]|15[0-9]|166|17[0-9]|18[0-9]|19[8|9])\d{8}$

【5】电话号码

^(\d{3,4}-)?\d{7,8}$

【6】18位身份证号码(数字、字母x结尾)

^((\d{18})|([0-9x]{18})|([0-9X]{18}))$

【7】账号是否合法(5~16字节,允许字母、数字、下划线,以字母开头)

^[a-zA-Z][a-zA-Z0-9_]{4,15}$

【8】一年的12个月(01~09和1~12)

^(0?[1-9]|1[0-2])$

【9】日期格式(2018-01-01只做粗略匹配,格式不限制,二月有30天等)

^\d{4}-\d{1,2}-\d{1,2}$

【10】一个月的31天(01~09和1~31)

^((0?[1-9])|((1|2)[0-9])|30|31)$

【11】IP 地址

^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/108471.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

拆箱phper最适合入门的go框架beego

beego beego 是一个快速开发 Go 应用的 HTTP 框架,他可以用来快速开发 API、Web 及后端服务等各种应用,是一个 RESTful 的框架,主要设计灵感来源于 tornado、sinatra 和 flask 这三个框架,但是结合了 Go 本身的一些特性&#xff…

路由信息协议RIP(计算机网络)

目录 路由选择协议 路由信息协议 RIP中的距离 RIP协议的具体算法 RIP协议路由表的更新 例题 距离向量算法 RIP 协议的要点 路由选择协议 路由器之间要互相不断交换网络拓扑和状态信息,根据信息求出到所有目的网络的最佳路由 用于交换路由信息,进…

软件测试实战教程系列—接口测试用例和报告模板|收藏版

文章目录 接口测试为什么会如此重要呢? 接口测试的必要性 获取接口相关信息 接口测试的流程 接口文档 是接口测试的参照,至少包括: 接口测试用例设计 接口测试用例模板 (可根据项目实际情况设计增减) 接口测试…

前端基础_组合多个图形

组合多个图形 在前面的实例中,我们看到使用Canvas API可以将一个图形重叠绘制在另一个图形上面,但图形中能够被看到的部分完全取决于以哪种方式进行组合,这时需要使用到Canvas API的图形组合技术。在HTML5中,只要用图形上下文对象…

模数转换器(ADC)

目录 一、简介: 二、主要特征 三、校准(CLB) 四、ADC时钟 五、ADCON开关 六、规则组和注入组 七、转换模式 八、注入通道管理 九、可编程的采样时间 十、外部触发 十一、温度传感器和内部参考电压 一、简介: 12位ADC是…

CSS -- 使用纯CSS实现旋转木马相册的效果

如果对3D转换不熟悉可以参考&#xff1a;CSS – CSS3中3D转换相关属性讲解&#xff08;translate3d&#xff0c;rotate3d&#xff0c;perspective&#xff0c;transform-style&#xff09; 如果对动画不熟悉可以参考&#xff1a;CSS – CSS3基础动画讲解 旋转木马图片相册 <…

centos 7安装mysql

一.安装之前检测系统是否有自带的MySQL(若是没有安装直接忽略该步骤) rpm -qa | grep mysql #检查是否安装过MySQL rpm -qa | grep mariadb #检查是否存在 mariadb 数据库&#xff08;内置的MySQL数据库&#xff09;&#xff0c;有则强制删除 rpm -e --nodeps mariadb-libs-…

信而泰BGP Flow Spec防攻击测试解决方案

随着互联网行业的迅猛发展&#xff0c;越来越多的业务都从线下走到了线上。互联网在给大家生活带来便利的同时也面临着防护自身安全的各种挑战。 DoS/DDoS攻击是对网络安全的重大威胁&#xff0c;攻击者通过多个控制端控制成千上万的攻击设备对同一个目的地址、网段或服务器同…

【触摸屏功能测试】昆仑通态MCGS——物联网功能测试

测试触摸屏&#xff1a; 型号&#xff1a;TPC7022Ni 测试内容&#xff1a;物联网产品设备的无线通信和远程调试功能 物联网 1、功能概述 物联网产品设备可通过无线通讯的方式&#xff0c;进行远程调试和操作。物联网产品设备支持以下功能&#xff1a; l 4G和WiFi通信 l 远…

m基于kmeans和SVM的网络入侵数据分类算法matlab仿真

目录 1.算法描述 2.仿真效果预览 3.MATLAB核心程序 4.完整MATLAB 1.算法描述 首先计算整个数据集合的平均值点&#xff0c;作为第一个初始聚类中心C1&#xff1b; 然后分别计算所有对象到C1的欧式距离d&#xff0c;并且计算每个对象在半径R的范围内包含的对象个数W。 此时计…

非零基础自学Golang 第17章 HTTP编程(上) 17.2 HTTP客户端 17.2.3 发起GET请求

非零基础自学Golang 文章目录非零基础自学Golang第17章 HTTP编程(上)17.2 HTTP客户端17.2.3 发起GET请求第17章 HTTP编程(上) 17.2 HTTP客户端 17.2.3 发起GET请求 从现在开始我们将会学习如何使用Go语言模拟浏览器发起HTTP请求。 发起请求前需要创建一个请求对象&#xff…

WINDOWS下安装ORACLE客户端报错:无法访问临时位置

WINDOWS2016&#xff08;虚拟机&#xff09;安装oracle11g碰到“无法访问临时位置”的问题&#xff0c;详细信息如下&#xff1a; INS-30131] 执行安装程序验证所需的初始设置失败。 原因 - 无法访问临时位置。 操作 - 请确保当前用户具有访问临时位置所需的权限。 附加信息: …

【DETR目标检测】关键词:Decoder。Encoder。query向量。注意力机制。

声明:仅学习使用~ 目录 1、目标检测的基本思想2、整体网络架构3、位置信息初始化query向量4、注意力机制的作用方法5、训练过程的策略1、目标检测的基本思想 2015年,faster-rcnn; 2016年,YOLO; NMS:非极大值抑制; 2、整体网络架构 backbone 即先通过CNN 拿到每个pat…

Transformers18~ Diffusion

还是Transformers,来自 UC 伯克利的 William Peebles 以及纽约大学的谢赛宁撰文揭秘扩散模型中架构选择的意义&#xff0c;并为未来的生成模型研究提供经验基线。 近几年&#xff0c;在 Transformer 的推动下&#xff0c;机器学习正在经历复兴。过去五年中&#xff0c;用于自然…

【概述】请求报文在网络各层中的具体传输

请求报文在网络各层中的具体传输电脑中之间的通信&#xff0c;可以看成为两个应用进程之间的通信&#xff1b;一个请求从客户端到服务器端&#xff0c;通常需要经过三个阶段&#xff1a; 客户端路由转发阶段服务器端 客户端请求服务端 请求在客户端中每一层的具体传输数据 应…

LeetCode 322 周赛

2490. 回环句 句子 是由单个空格分隔的一组单词&#xff0c;且不含前导或尾随空格。 例如&#xff0c;"Hello World"、"HELLO"、"hello world hello world" 都是符合要求的句子。 单词 仅 由大写和小写英文字母组成。且大写和小写字母会视作不…

【Call for papers】2023年CCF-A类会议截稿日期(实时更新)

会议简称会议名称类别截稿日期链接S&P-2023IEEE Symposium on Security and Privacy网络与信息安全2022年12月2日Call for papersUSENIX ATC-2023USENIX Annul Technical Conference计算机体系结构/并行与分布计算/存储系统2023年1月12日Call for papersIJCAI-2023Internat…

H5后台读写CAD文件

说明 后台提供mxconvert.js程序&#xff0c;该程序使用JS编程&#xff0c;可以在后台实现读写CAD文件、读取CAD图纸数据等操作。 如何使用mxconvert.js转CAD图纸到梦想格式 1.Windows调用&#xff0c;进入 Bin\Release目录&#xff0c;命令行调用 node.exe mxconvert.js 1.d…

【推荐】动力锂电池及BMS系统介绍资料合集

锂动力电池是20世纪开发成功的新型高能电池。这种电池的负极是金属锂&#xff0c;正极用MnO2&#xff0c;SOCL2&#xff0c;(CFx)n等。70年代进入实用化。因其具有能量高、电池电压高、工作温度范围宽、贮存寿命长等优点&#xff0c;已广泛应用于军事和民用小型电器中&#xff…

部署AI平台 宝马集团正在掀起新一轮数字化改革浪潮

数字化转型作为当代企业创新求变的重要突破口&#xff0c;成为各行各业推进持续发展的大热趋势。但在企业的在数字化征程中&#xff0c;却暗藏多重陷阱&#xff0c;数据孤岛、标准不一、质量太差、治理滞后、安全隐患等挑战&#xff0c;如影随形。 近日&#xff0c;宝马集团宣布…