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

news2024/11/18 3:19:31

        正则表达式(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]

拓展:

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

  

 

更新中……

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

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

相关文章

【广州华锐视点】帆船航行VR模拟实操系统

帆船航行VR模拟实操系统由广州华锐视点开发,是一种创新的教学工具,它利用虚拟现实技术,为学生提供了一个沉浸式的学习环境。通过这种系统,学生可以在虚拟的环境中进行帆船航行的实训,从而更好地理解和掌握帆船航行的技…

腾讯云3年轻量应用服务器2核4G5M和2核2G4M详细介绍

腾讯云轻量应用服务器3年配置,目前可以选择三年的轻量配置为2核2G4M和2核4G5M,2核2G4M和2核4G5M带宽,当然也可以选择选一年,第二年xufei会比较gui,腾讯云百科分享腾讯云轻量应用服务器3年配置表: 目录 腾…

云原生 envoy xDS 动态配置 java控制平面开发 支持restful grpc

envoy xDS 动态配置 java控制平面开发 支持restful grpc 大纲 基础概念Envoy 动态配置API配置方式动静结合的配置方式纯动态配置方式实战 基础概念 Envoy 的强大功能之一是支持动态配置,当使用动态配置时,我们不需要重新启动 Envoy 进程就可以生效。…

数据结构的图存储结构

目录 数据结构的图存储结构 图存储结构基本常识 弧头和弧尾 入度和出度 (V1,V2) 和 的区别,v2> 集合 VR 的含义 路径和回路 权和网的含义 图存储结构的分类 什么是连通图,(强)连通图详解 强连通图 什么是生成树,生…

Python之Qt输出UI

安装PySide2 输入pip install PySide2安装Qt for Python,如果安装过慢需要翻墙,则可以使用国内清华镜像下载,输入命令pip install --user -i https://pypi.tuna.tsinghua.edu.cn/simple PySide2,如下图, 示例Demo i…

每天一道leetcode:1192. 查找集群内的关键连接(图论困难tarjan算法)

今日份题目: 力扣数据中心有 n 台服务器,分别按从 0 到 n-1 的方式进行了编号。它们之间以 服务器到服务器 的形式相互连接组成了一个内部集群,连接是无向的。用 connections 表示集群网络,connections[i] [a, b] 表示服务器 a …

-Webkit-Box 在 Safari 中出现的兼容性问题

一、问题背景: UI要求要实现这样的效果,使用 display:-webket-box在chrome浏览器下完美解决 但是马上啪啪打脸,在safari浏览器下显示空白 ,不能不说浏览器之间的兼容性简直就是天坑 二、解决办法 通过浏览器调试发现原本float的…

Java数字化智慧工地管理云平台源码(人工智能、物联网、大数据)

智慧工地优势:"智慧工地”将施工企业现场视频管理、建筑起重机械安全监控、现场从业人员管理、物料管理、进度管理、扬尘噪声监测等现场设备有机、高效、科学、规范的结合起来真正实现工程项目业务流与现场各类监控源数据流的有效结合与深度配合,实…

C# WPF 中 外部图标引入iconfont,无法正常显示问题 【小白记录】

wpf iconfont 外部图标引入&#xff0c;无法正常显示问题。 1. 检查资源路径和引入格式是否正确2. 检查资源是否包含在程序集中 1. 检查资源路径和引入格式是否正确 正确的格式&#xff0c;注意字体文件 “xxxx.ttf” 应写为 “#xxxx” <TextBlock Text"&#xe7ae;…

Rust软件外包开发语言的特点

Rust 是一种系统级编程语言&#xff0c;强调性能、安全性和并发性的编程语言&#xff0c;适用于广泛的应用领域&#xff0c;特别是那些需要高度可靠性和高性能的场景。下面和大家分享 Rust 语言的一些主要特点以及适用的场合&#xff0c;希望对大家有所帮助。北京木奇移动技术有…

通过网络流量报告监控网络性能

实时网络流量监控已被组织广泛采用&#xff0c;作为了解网络性能和拥塞问题的首选技术。但是&#xff0c;有几个网络问题需要一个超越实时流量监控的解决方案。网络中的持续滞后可能会无人值守并影响整个网络的效率&#xff0c;使用网络流量报告将有助于管理网络环境中的风险。…

Visual Studio 2019 c++ 自定义注释 ----doxygen

可加入C 也可自定义。 <?xml version"1.0" encoding"utf-8"?> <CodeSnippets xmlns"http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet"><CodeSnippet Format"1.0.0"><Header><Title>注释…

uniapp开发微信小程序使用painter将页面转换为图片并保存到本地相册

引言 我使用到painter的原因是&#xff0c;在uniapp开发微信小程序时&#xff0c;需要将一个页面的内容转换成图片保存到本地相册。 起初在网上找到很多都是在uniapp中使用 html2canvas 将网页转换成图片再jspdf将图片转换为pdf&#xff0c;但是这种方式在小程序环境不支持&am…

Redis-分布式锁!

分布式锁&#xff0c;顾名思义&#xff0c;分布式锁就是分布式场景下的锁&#xff0c;比如多台不同机器上的进程&#xff0c;去竞争同一项资源&#xff0c;就是分布式锁。 分布式锁特性 互斥性:锁的目的是获取资源的使用权&#xff0c;所以只让一个竞争者持有锁&#xff0c;这…

ARM--day4(电灯实验、分析RCC、GPIO控制器,PMOS管、NMOS管的基本原理)

电灯实验代码&#xff1a; .text .global _start _start: /**********LED1点灯**************/RCC_INIT:1.使能GPIOE组控制器&#xff0c;通过RCC_AHB4ENSETR寄存器设置第&#xff3b;5:4&#xff3d;位写&#xff11;---->0x50000A28[4]1ldr r0,0x50000A28ldr r1,[r0]orr…

基于ArcGis提取道路中心线

基于ArcGis提取道路中心线 文章目录 基于ArcGis提取道路中心线前言一、生成缓冲区二、导出栅格数据三、导入栅格数据四、新建中心线要素五、生成中心线总结 前言 最近遇到一个问题&#xff0c;根据道路SHP数据生成模型的时候由于下载的道路数据杂项数据很多&#xff0c;所以导…

XSS 跨站脚本攻击

XSS(DOM) XSS 又称CSS(Cross Site Scripting)或跨站脚本攻击&#xff0c;攻击者在网页中插入由JavaScript编写的恶意代码&#xff0c;当用户浏览被嵌入恶意代码的网页时&#xff0c;恶意代码将会在用户的浏览器上执行。 XSS攻击可分为三种&#xff1a;分别为反射型(Reflected…

NLP——操作步骤讲义与实践链接

数据集与语料 语料是NLP的生命之源&#xff0c;所有NLP问题都是从语料中学到数据分布的规律语料的分类&#xff1a;单语料&#xff0c;平行语料&#xff0c;复杂结构 语料的例子&#xff1a;Penn Treebank, Daily Dialog, WMT-1x翻译数据集&#xff0c;中文闲聊数据集&#xf…

使用navicat连接postgresql报错问题解决

使用navicat连接postgresql报错问题解决 一、问题现象&#xff1a; 最近使用Navicat来连接postgreSQL数据库&#xff0c;发现连接不上&#xff0c;报错信息如下&#xff1a; 自己百度了一下&#xff0c;发现pgsql 15版本以后&#xff0c;有些系统表的列名改了&#xff0c;pg_…

【tool】快捷操作

最近在弄材料然后文件太深了&#xff0c;交流起来很不方便&#xff0c;做了记录 复制文件路径 复制文件路径步骤&#xff1a; 1、首先按住Shift 鼠标右键单击&#xff0c;弹出&#xff1a;复制为路径 2、快捷键黏贴路径&#xff0c;即可