C#正则表达式的基本语法

前言

正则表达式的匹配模式由一系列数字、文字、运算符、字符等的字符组成,根据自己需求设计对应的模式,实现分析、匹配的操作。本文将对正则表达式组成语法进行讲解。

语法规则

正则表达式构建的匹配模式由转义字符、字符类、定位符、分组构造、限定符、反向引用构造、备用构造、替换、杂项构造等组成。

1、特殊字符:正则表达式中已经具有一定特殊意义的字符

字符描述
^匹配输入字符串的开始位置
$匹配输入字符串的结束位置
\将特殊字符变为普通的字符;指定预定义字符集;定义断言
?匹配前面的字符零次或一次
+匹配前面的字符一次或多次
*匹配前面的字符零次或多次
.匹配出换行符外的任意一个字符
-表示字符的匹配范围
|匹配以竖线字符分隔的任何一个字符

示例:

#region ^
// 模式 ^136string pattern = @"^136";Console.WriteLine(string.Format("字符串是否以136开头:{0}", Regex.IsMatch("1380000001", pattern)));
// 输出
字符串是否以136开头:false
#endregion#region $
// 模式 $136string pattern = @"$136";Console.WriteLine(string.Format("字符串是否以136开头:{0}", Regex.IsMatch("13800010136", pattern)));
// 输出
字符串是否以136结束:true
#endregion#region -
// 模式 ^[A-Za-z]+$Regex regex = new Regex(@"^[A-Za-z]+$");Console.WriteLine(string.Format("字符串是否全为英文字母:{0}",regex.IsMatch("Hello123")));
// 输出
字符串是否全为英文字母:false
#endregion

2、转义字符:将特殊字符变为普通的字符。下表列举了一些常用的转义字符:

字符描述
\a警报
\b退格
\eEsc
\f换页符
\n换行符
\r回车符
\t水平制表符

示例:


#region \n
// 模式 \n(\w+) 匹配换行符+)");string content = "\nHello\nWorld";MatchCollection matches = Regex.Matches(content,@"\n(\w+)");foreach (Match match in matches){Console.WriteLine(string.Format("{0}",match.Value));}
// 结果
Hello
World
#endregion

3、定位符:根据字符位置来进行匹配。下表列举一些常用的定位符:

字符描述
\A匹配字符串的开始位置
\Z匹配字符串的结尾位置或结尾换行之前的位置
\z匹配字符串的结尾位置
\G匹配上一个匹配结束的位置
\b匹配字符的开始或结束的位置
\B匹配字符的中间位置

示例:

#region \A
// 模式 \A136string pattern = @"\A136";Console.WriteLine(string.Format("字符串是否以136开头:{0}", Regex.IsMatch("136SayHello", pattern)));
// 输出
字符串是否以136开头:true
#endregion#region \B 
// 模式 \Bin\w+
// \B 不在单词边界处开始匹配
// in  匹配子字符串“in”
// \w+ 匹配一个或多个单词字符string content = "starting running ending";foreach(Match match in Regex.Matches(content, @"\Bin\w+")){Console.WriteLine(" {0} 在字符位置 {1}", match.Value, match.Index);}
// 输出
ing 在字符位置 5
ing 在字符位置 13
#endregion

4、字符类:定义一组字符,其中的任一字符均可出现在输入字符串中以便成功匹配。

字符描述
[character_group]正字符组指定一个字符列表,任何一个字符可出现在输入字符串中以便进行匹配。
[first-last]正字符组一个字符范围
[^character_group]负字符组指定一个字符列表,任何字符不得出现在输入字符串中以便进行匹配。
[^first-last]负字符组一个字符范围
\w与任何单词字符匹配
\W任何非单词字符
\p{name}name 指定的 Unicode 通用类别或命名块中的任何单个字符匹配
\P{name}与不在 name 指定的 Unicode 通用类别或命名块中的任何单个字符匹配
\s与空白字符匹配
\S与任何非空白字符匹配
\d与任何十进制数字匹配
\D匹配不是十进制数的任意字符

示例:

#region [first-last]
// 模式 \b[A-Z]\w*\b
// \b  在单词边界处开始。
// [A-Z]  匹配从 A 到 Z 的所有大写字符。
// \w*  匹配零个或多个单词字符。
// \b  与字边界匹配。
string content = "A work B Hard Zero Time";
foreach (Match match in Regex.Matches(content, @"\b[A-Z]\w*\b"))
{Console.WriteLine("{0}", match.Value);
}
// 输出
A
B
Hard
Zero
Time
#endregion#region \D
// 模式 ^\D\d{1,5}\D*$
// ^  从输入字符串的开头部分开始匹配。
// \D  匹配非数字字符。
// \d{1,5}  匹配一到五个十进制数字。
// \D*  匹配零个、一个或多个非十进制字符。
// $  匹配输入字符串的末尾部分。string content = "A1039C";Console.WriteLine("{0}", Regex.IsMatch(content, @"^\D\d{1,5}\D*$"));
// 输出
True
#endregion

5、限定符:指定输入中必须存在字符、组或字符类的多少实例才能找到匹配项。

字符描述
{n}恰好匹配 n 次
{n,}至少匹配 n 次
{n,m}匹配 n 到 m 次
*?匹配零次或多次
+?匹配一次或多次
??匹配零次或一次
{n}?前面的元素恰好匹配 n 次
{n,?}前面的元素至少匹配 n 次,但次数尽可能少
{n,m}?匹配上一元素 n 次到 m 次,但次数尽可能少

示例:

#region {n,m}
// 模式 ^\D\d{1,3}\D*$
// ^  从输入字符串的开头部分开始匹配。
// \D  匹配非数字字符。
// \d{1,3}  匹配一到五个十进制数字。
// \D*  匹配零个、一个或多个非十进制字符。
// $  匹配输入字符串的末尾部分。string content = "B30590C";Console.WriteLine("{0}", Regex.IsMatch(content, @"^\D\d{1,3}\D*$"));
// 输出
False
#endregion

6、分组

字符描述
(subexpression)捕获匹配的子表达式
(?<name>subexpression)捕获匹配的子表达式,并允许你按名称或编号访问它
(?<name1 -name2>subexpression)平衡组定义将删除以前定义的组和存储的定义
(?: subexpression)不会捕获与子表达式匹配的子字符串
(?imnsx-imnsx:subexpression)应用或禁用子表达式中指定的选项
(?= subexpression)定义零宽度正预测先行断言
(?! subexpression)定义零宽度负预测先行断言
(?> subexpression)定义零宽度正回顾后发断言

示例:

#region (?> subexpression)
// 模式 (?<=\b31)\d{2}\b
// (?<=\b31)  以数字位数“31”开头,则继续匹配。
foreach (Match match in Regex.Matches("3124 2024 1140 3119", @"(?<=\b31)\d{2}\b"))
{Console.WriteLine(match.Value);
}
// 结果
// 24
// 19
#endregion
#region (subexpression)
// 模式 (?<=\b31)\d{2}\b
// (?<=\b31)  以数字位数“31”开头,则继续匹配。
foreach (Match match in Regex.Matches("3124 2024 1140 3119", @"(?<=\b31)\d{2}\b"))
{Console.WriteLine(match.Value);
}
// 结果
// 24
// 19
#endregion

7、替换

字符描述
$number替换按组 number 匹配的子字符串。
${name}包括替换字符串中由 (name) 指定的命名组所匹配的最后一个子字符串。
$$包括替换字符串中的单个“$”文本
$&包括替换字符串中整个匹配项的副本。
$`包括替换字符串中的匹配项前的输入字符串的所有文本。
$'包括替换字符串中的匹配项后的输入字符串的所有文本。
$+包括在替换字符串中捕获的最后一个组。
$_包括替换字符串中的整个输入字符串。

小结

正则表达式是处理字符串的强大工具,拥有独特的语法和独立的处理引擎。本文通过一些示例来介绍正则表达式组成模式的常用字符及语法。

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

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

相关文章

.net core 的缓存方案

这里主要讲两个缓存的使用&#xff0c;MemoryCache和Redis 先讲讲常见的缓存 1、.net framework web中自带有Cache缓存&#xff0c;这种缓存属于粘性缓存&#xff0c;是缓存到项目中的&#xff0c;项目从服务器迁移的时候缓存的内容也能够随着服务器一起迁移 2、MemoryCache缓存…

知识不成体系?这篇Mysql数据库将成为你的解忧杂货店!(索引)

欢迎来到一夜看尽长安花 博客&#xff0c;您的点赞和收藏是我持续发文的动力 对于文章中出现的任何错误请大家批评指出&#xff0c;一定及时修改。有任何想要讨论的问题可联系我&#xff1a;3329759426qq.com 。发布文章的风格因专栏而异&#xff0c;均自成体系&#xff0c;不足…

基于bootstrap的12种登录注册页面模板

基于bootstrap的12种登录注册页面模板&#xff0c;分三种类型&#xff0c;默认简单的登录和注册&#xff0c;带背景图片的登录和注册&#xff0c;支持弹窗的登录和注册页面html下载。 微信扫码下载

【SGX系列教程】(四)Intel-SGX 官方示例分析(SampleCode)——LocalAttestation

文章目录 一.LocalAttestation原理介绍1.1本地认证原理1.2 本地认证基本流程1.3 本地认证核心原理 二.源码分析2.1 README2.1.1 编译流程2.1.2 执行流程&#xff08;双进程执行 or 单进程执行&#xff0c;在后面执行部分有展示效果&#xff09;2.1.3 如何获取已签名的Enclave的…

【SpringBoot】SpringBoot核心启动流程源码解析

SpringBoot总体流程 当我们启动一个SpringBoot程序的时候&#xff0c;只需要一个main方法就可以启动&#xff0c;但是对于其中流程时如何执行的&#xff0c;以及如何调用spring的IOC和AOP机制&#xff0c;本篇带着这个问题来整体体系化的梳理下流程。 SpringBootApplication …

redis的IO多路复用

多路IO复用是一种同时监听多个文件描述符(如socket)的状态变化&#xff0c;并能在某个文件描述符就绪时执行相应操作的技术&#xff0c;在redis中&#xff0c;多路IO复用技术主要用于处理客户端的连接请求和读写操作&#xff0c;以实现高并发&#xff0c;高性能服务&#xff0c…

OFDM技术简介——背景

l 1966 年&#xff0c; R. W. Chang 提出在带限信道中用 正交信号 同时传输 多路数据 的原理&#xff0c;同时这种传输方式保证系统中不存在符号间串扰和子信道间干扰&#xff0c;该技术可以有效提高频谱利用率&#xff0c;可以有效对抗信道多径衰落。 l 1971 年&#xff0c; …

【无标题】c# WEBAPI 读写表到Redis

//c# WEBAPI 读写表到Redis using System; using System.Collections.Generic; using System.Linq; using System.Net; using System.Net.Http; using System.Web.Http; using Newtonsoft.Json; using StackExchange.Redis; using System.Data; using System.Web; namespace …

Spring动态代理详解

一&#xff0c;动态代理 我发现Spring框架中的动态代理是一种非常强大的机制&#xff0c;它可以在运行时为接口或类创建动态代理&#xff0c;然后通过这些代理在方法调用前后添加额外的行为。在后续Spring的AOP&#xff08;面向切面编程&#xff09;支持中扮演了关键角色。 二…

农林企业资质提升策略:聚焦农业综合生态乙级认证

1. 深入了解资质要求 首要任务是全面细致地研究乙级资质的最新标准和要求&#xff0c;包括企业规模、技术人员配置、过往项目经验、财务状况、管理体系等具体指标。 2. 专业团队构建 强化技术团队&#xff0c;确保拥有一支包含注册农业工程师、生态学专家、环境工程师、农业…

vue 自定义组件 实现跟使用

新建文件组件 选择器作用 ~ 波浪线这个是选择 li 后面的所有 a标签 调用 到使用的文件下引入 使用 效果

每日算法-插值查找

1.概念 插值查找是一种改良版的二分查找,其优势在于,对于较为均匀分布的有序数列,能够更快地使得mid中间游标快速接近目标值. 2.计算公式 中间游标计算公式. 公式说明: 公式的主要思路是,以第一次定位mid中间游标为例, 在接近平均分配的情况下,左右游标之间的差值表示总计供…

Animate软件基础:从单个图层复制帧

在使用Animate软件制作内容时&#xff0c;有时会需要复制制作好的部分动画&#xff0c;到新的场景中&#xff0c;或者从一个制作文件中复制内容到另一个制作文件&#xff0c;这就需要复制帧的操作&#xff0c;这里讲一下从单个图层复制帧的方法。 在图层中选择一组帧。要选择整…

React@16.x(44)路由v5.x(9)源码(1)- path-to-regexp

目录 1&#xff0c;作用2&#xff0c;实现获取 match 对象2.1&#xff0c;match 对象的内容2.2&#xff0c;注意点2.3&#xff0c;实现 1&#xff0c;作用 之前在介绍 2.3 match 对象 时&#xff0c;提到了 react-router 使用第3方库 path-to-regexp 来匹配路径正则。 我们也…

新能源汽车 LabCar 测试系统方案(二)

什么是LabCar测试 LabCar测试目标是进行整车黄板台架功能测试&#xff0c;用于整车开发和测试阶段&#xff0c;满足设计人员和测试人员的试验需求&#xff0c;以验证整车性能&#xff0c;减少开发工作量。系统主要用于测试静态及动态工况下的纯电动汽车的各项功能实现情况。 …

git 用户名密码Clone代码

#密码中包含&#xff0c;则使用%40代表 cd /disk03/wwwroot/GitDemo/BuildTemp && git clone -b dev --single-branch http://root:test%40123192.168.31.104/root/SaaS.Auto.Api.git git pull origin dev 今天使用LibGit2Sharp在Linux上Clone代码时报错&#xff0c;因…

【计算机网络】HTTP——基于HTTP的功能追加协议(个人笔记)

学习日期&#xff1a;2024.6.29 内容摘要&#xff1a;基于HTTP的功能追加协议和HTTP/2.0 HTTP的瓶颈与各功能追加协议 需求的产生 在Facebook、推特、微博等平台&#xff0c;每分每秒都会有人更新内容&#xff0c;我们作为用户当然希望时刻都能收到最新的消息&#xff0c;为…

laravel Dcat Admin 入门应用(三)Grid 之 Column

Dcat Admin 是一个基于 Laravel-admin 二次开发而成的后台构建工具&#xff0c;只需很少的代码即可构建出一个功能完善的高颜值后台系统。支持页面一键生成 CURD 代码&#xff0c;内置丰富的后台常用组件&#xff0c;开箱即用&#xff0c;让开发者告别冗杂的 HTML 代码。 larav…

如何在Vue3项目中引入TypeScript

在这篇文章中&#xff0c;我们将一步步指导你如何在Vue3项目中引入TypeScript。TypeScript是一种强类型的JavaScript超集&#xff0c;可以帮助我们在编写代码时避免许多错误&#xff0c;提高代码的可维护性。下面是具体的实现过程&#xff1a; 第一步&#xff1a;初始化Vue3项目…

Python | Leetcode Python题解之第188题买卖股票的最佳时机IV

题目&#xff1a; 题解&#xff1a; class Solution:def maxProfit(self, k: int, prices: List[int]) -> int:if not prices:return 0n len(prices)k min(k, n // 2)buy [0] * (k 1)sell [0] * (k 1)buy[0], sell[0] -prices[0], 0for i in range(1, k 1):buy[i] …