【Go】Go 文本匹配 - 正则表达式

        正则表达式(Regular Expression, 缩写常用regex, regexp表示)是计算机科学中的一个概念,很多高级语言都支持正则表达式。

目录

何为正则表达式

语法规则

普通字符

字符转义


何为正则表达式

        正则表达式是根据一定规则构建而出的规则,用于匹配字符串中子串或字符组合的模式。正则表达式可以通过符号+字符的形式来表示,完成对一系列符合某个语法规则的字符串的匹配。很多应用中也有对正则表达式的应用,例如Visual Studio中的查找替换功能、谷歌百度搜索引擎中的搜索字段等。

        在开发当中,正则表达式也扮演着十分重要的角色。比如我们在做了一个文本输入框,需要判断文本输入框中是否为邮箱格式,那么此时就可以通过正则表达式来实现判定匹配(可以用繁长的if else这类语句实现,但这也偏离了正则表达式的设计初衷了~)

        OK,接下来让我们来看看Golang中正则表达式的语法


语法规则

普通字符

        普通字符是正则表达式的基本组成之一,是正则表达式的“基石”。普通字符包括有“可打印字符”、“不可打印字符”,其中“可打印字符”中又包含了大写字母、小写字母、数字、标点符号和其他一些符号

        这里设计一个场景,假设我们需要判断一个字符变量是否是数字,若不考虑使用正则表达式,那么要实现这个判断,我们需要使用下列代码

switch num {

	case 1 :
	case 2 :
	case 3 :
		.
		.
		.
	case 0 :	

}

        又或者借助多个if else语句(在这里不一一列举了)。如果用这种方式,开发效率将会大打折扣。

        此时,我们便可以尝试使用正则表达式了~

[0123456789]

        方括号“[]”表示的是一个“字符组”,代表一位字符。方括号中的数字“0123456789”表示只要待匹配的字符串与其中任何一个字符相同,那么程序就会认为匹配成功,反之匹配失败。

        如果想表达的数字(ASCII码)是连续的,那么也可以用元字符“-”来对表达式进行简化,见下方:

[0-9]

拓展:

        ASCII码表

        依次类推,当我们想判断一个长度为1的字符串是否是英文小写字母,可以写成:

[a-z]

        那像表示由大写字母“A”到小写字母"z"呢?这里要注意,我们不能写成 [A-z],观察拓展中的ASCII表,其中在字母“A”和字母"a"之间存在其他字符。

        那么正确的表达方式应是

[a-zA-Z]

        如果要判断长度为2的字符串中是否含有小写字母呢?

[a-z][a-z]

        当允许的字符范围只有一个时可以省略“[]”。比如,判断输入的是“Hello”还是"hello":

[Hh]ello

字符转义

        在正则表达式中,有时我们需要使用符号本身的意义,例如之前所用到的字符‘-’,如果在没进行转义的情况下,它是一个元字符,是一个“功能性”的符号;当我们确实需要表达‘-’这个符号的本义时,就需要使用反斜杠‘\’了。例如若要匹配‘[’符号,则可以表示为:

[\[]

        如果想匹配“a” “-” “z” 这三个字符,那么便可以用下列表达式:

[0\-9]

拓展:

        元字符除了 ‘-’ 之外,还有其他的,见下表:

  

 

更新中……

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

ClickHouse AST is too big 报错问题处理记录

ClickHouse AST is too big 报错问题处理记录 问题描述问题分析解决方案1、修改系统配置2、修改业务逻辑 问题描述 项目中统计报表的查询出现 AST is too big 问题,报错信息如下: 问题分析 报错信息显示 AST is too big。 AST 表示查询语法树中的最大…

C++线程库

C线程库是C11新增的重要的技术之一,接下来来简单学习一下吧! thread类常用接口 函数名功能thread()构造一个线程对象,没有关联任何线程函数,即没有启动任何线程。thread(fn, args1, args2, ...)构造一个线程对象,并…

04 mysql innodb record

前言 最近看到了 何登成 大佬的 "深入MySQL源码 -- Step By Step" 的 pdf 呵呵 似乎是找到了一些 方向 之前对于 mysql 方面的东西, 更多的仅仅是简单的使用[业务中的各种增删改查], 以及一些面试题的背诵 这里会参照 MySQL Internals Manual 来大致的看一下 i…

Opencv特征检测之ORB算法原理及应用详解

Opencv特征检测之ORB算法原理及应用详解 特征是图像信息的另一种数字表达形式。一组好的特征对于在指定 任务上的最终表现至关重要。视觉里程 (VO) 的主要问题是如何根据图像特征来估计相机运动。但是,整幅图像用来计算分析通常比较耗时,故而转换为分析图像中的特征点的运动…

深入解析 Axios Blob 的使用方法及技巧

在 Web 开发中,处理文件传输是一个常见的需求。Blob(二进制对象)是一种表示二进制数据的方式,常用于处理文件和多媒体数据。本文将介绍如何使用 Axios 和 Blob 来处理文件传输。 Axios Blob 概念 在开始之前,让我们先…

计算机视觉目标检测性能指标

目录 精确率(Precision)和召回率(Recall) F1分数(F1 Score) IoU(Intersection over Union) P-R曲线(Precision-Recall Curve)和 AP mAP(mean…

Spring Boot单元测试与Mybatis单表增删改查

目录 1. Spring Boot单元测试 1.1 什么是单元测试? 1.2 单元测试有哪些好处? 1.3 Spring Boot 单元测试使用 单元测试的实现步骤 1. 生成单元测试类 2. 添加单元测试代码 简单的断言说明 2. Mybatis 单表增删改查 2.1 单表查询 2.2 参数占位符 ${} 和 #{} ${} 和 …

VGG分类实战:猫狗分类

关于数据集 数据集选择的是Kaggle上的Cat and Dog,猫狗图片数量上达到了上万张。你可以通过这里进入Kaggle下载数据集Cat and Dog | Kaggle。 在我的Github仓库当中也放了猫狗图片各666张。 VGG网络 VGG的主要特点是使用了一系列具有相同尺寸 3x3 大小的卷积核进…

数据结构之动态内存管理机制

目录 数据结构之动态内存管理机制 占用块和空闲块 系统的内存管理 可利用空间表 分配存储空间的方式 空间分配与回收过程产生的问题 边界标识法管理动态内存 分配算法 回收算法 伙伴系统管理动态内存 可利用空间表中结点构成 分配算法 回收算法 总结 无用单元收…

PyTorch翻译官网教程-LANGUAGE MODELING WITH NN.TRANSFORMER AND TORCHTEXT

官网链接 Language Modeling with nn.Transformer and torchtext — PyTorch Tutorials 2.0.1cu117 documentation 使用 NN.TRANSFORMER 和 TORCHTEXT进行语言建模 这是一个关于训练模型使用nn.Transformer来预测序列中的下一个单词的教程。 PyTorch 1.2版本包含了一个基于论…

判断推理

六哥爱学习呀 产品经理 不是说我努力学习我就一定可以通过考试,所以是推不出,类似数学中充分必要性 8 回复 发布于 2019-08-07 16:28 官方解析: 当丙的范围足够大时,可能与甲相交或完全包含甲,在此情况下,有…

Python方式实现射后不管导弹的简易制导系统

1 问题 对QN-506上的S570智能反坦克制导导弹的射后不管产生了浓厚的兴趣,想用Python简易还原一下。 2 方法 之前查阅资料时了解到使用pygame库制作的贪吃蛇,是否有一种方法能让“贪吃蛇”一直跟着鼠标走呢?鼠标模拟行进中的坦克,“…

Linux 常见问题解决思路

Linux 常见问题解决思路 CPU 高系统平均负载高(load average) CPU 高 1,步骤:查找进程-》查找线程-》分析threadDump日志-》找出问题代码 a、查看 cpu 高的 java 进程 topb、生成进程下所有线程的栈日志 jstack 1721 > 1712.…

设计模式之单例设计模式

单例设计模式 2.1 孤独的太阳盘古开天,造日月星辰。2.2 饿汉造日2.3 懒汉的队伍2.4 大道至简 读《秒懂设计模式总结》 单例模式(Singleton)是一种非常简单且容易理解的设计模式。顾名思义,单例即单一的实例,确切地讲就是指在某个系统中只存在…

centos 7.9 部署django项目

1、部署框架 主要组件:nginx、uwsgi、django项目 访问页面流程:nginx---》uwsgi---》django---》uwsgi---》nginx 2、部署过程 操作系统:centos 7.9 配置信息:4核4G 50G 内网 eip :10.241.103.216 部署过程&…

pycharm调整最大堆发挥最大

python程序运行时,怎么提高效率,设置pycharm最大堆过程如下; 一、进入设置pycharm最大堆; 二、进入设置pycharm最大堆; 如果8g设置为6g左右,占75%左右最佳

数学建模之“TOPSIS数学模型”原理和代码详解

一、简介 TOPSIS(Technique for Order Preference by Similarity to Ideal Solution)是一种多准则决策分析方法,用于解决多个候选方案之间的排序和选择问题。它基于一种数学模型,通过比较每个候选方案与理想解和负理想解之间的相…

小程序CSS button按钮自定义高度之后不居中

问题&#xff1a; 按钮设置高度后不居中 <view><button class"btn1" size"">Save</button> </view> page {font-size: 30rpx; }.btn1 {margin-top: 100rpx;height: 190rpx;background: linear-gradient(90deg, #FF8A06, #FF571…

c语言每日一练(8)

前言&#xff1a;每日一练系列&#xff0c;每一期都包含5道选择题&#xff0c;2道编程题&#xff0c;博主会尽可能详细地进行讲解&#xff0c;令初学者也能听的清晰。每日一练系列会持续更新&#xff0c;暑假时三天之内必有一更&#xff0c;到了开学之后&#xff0c;将看学业情…

微信小程序:模板使用

目录 模板的优点&#xff1a; 一、静态模板创建 二、静态模板使用 1.*.wxml引入模板 2.模板使用 3.*.wxss引入模板的样式 三、动态模板创建 四、动态模板使用 1.*.wxml引入模板 2.模板使用 3.*.js定义动态数据 五、结果展示 总结 模板的优点&#xff1a; 有利于保持网…