Match.NextMatch方法

26、.NET正则表达式的使用与选项详解 本文详细介绍了在 .NET 和 PowerShell 中使用正则表达式的方法和选项。内容涵盖了正则表达式的基本方法如 IsMatch、Match、Replace、Split 等,以及如何通过 RegexOptions 控制匹配行为,包括忽略大小写、多行模式、单行模式等。文章还提供了多个实际示例,帮助读者掌握正则表达式的灵活运用,并介绍了调试技巧和性能优化建议。 阅读详情

Match.NextMatch 方法

从上一个匹配结束的位置(即在上一个匹配字符之后的字符)开始返回一个包含下一个匹配结果的新 Match 对象。

public System.Text.RegularExpressions.Match NextMatch ();

Returns

Match
下一个正则表达式匹配。

Exceptions

RegexMatchTimeoutException
发生超时。

示例

下面的示例使用 NextMatch 方法来捕获除第一个匹配项之外的正则表达式匹配项。

using System;
using System.Text.RegularExpressions;

class Example
{
   static void Main()
   {
      string text = "One car red car blue car";
      string pat = @"(\w+)\s+(car)";

      // 实例化正则表达式对象
      Regex r = new Regex(pat, RegexOptions.IgnoreCase);

      // 将正则表达式模式与文本字符串匹配
      Match m = r.Match(text);
      int matchCount = 0;
      while (m.Success)
      {
         Console.WriteLine("Match"+ (++matchCount));
         for (int i = 1; i <= 2; i++)
         {
            Group g = m.Groups[i];
            Console.WriteLine("Group"+i+"='" + g + "'");
            CaptureCollection cc = g.Captures;
            for (int j = 0; j < cc.Count; j++)
            {
               Capture c = cc[j];
               System.Console.WriteLine("Capture"+j+"='" + c + "', Position="+c.Index);
            }
         }
         m = m.NextMatch();
      }
   }
}
// 本示例显示以下输出:
//       Match1
//       Group1='One'
//       Capture0='One', Position=0
//       Group2='car'
//       Capture0='car', Position=4
//       Match2
//       Group1='red'
//       Capture0='red', Position=8
//       Group2='car'
//       Capture0='car', Position=12
//       Match3
//       Group1='blue'
//       Capture0='blue', Position=16
//       Group2='car'
//       Capture0='car', Position=21

备注

此方法类似于再次调用 Regex.Match(String, Int32) 和传递(Index+Length)作为新的起始位置。

备注
此方法不会修改当前实例。 相反,它会返回一个新的 Match 对象,其中包含有关下一个匹配项的信息。

如果匹配操作的超时值有效且尝试查找下一个匹配项超过该超时间隔,尝试检索下一个匹配项可能会引发 RegexMatchTimeoutException。

Notes to Callers

当通过调用 NextMatch() 方法重复匹配尝试时,正则表达式引擎将为空匹配提供特殊处理。 通常,NextMatch() 将从下一个匹配项的确切位置开始搜索下一个匹配项。 但是,在空匹配项后,NextMatch() 方法将前进一个字符,然后再尝试下一个匹配。 此行为保证了正则表达式引擎将遍历字符串。 否则,由于空匹配不会导致任何向前移动,因此下一个匹配项将与上一个匹配项完全相同的位置开始,并且它将重复匹配相同的空字符串。

以下示例提供了一个说明。正则表达式模式a *在字符串"abaabb"中搜索零个或多个出现的字母"a"。如示例的输出所示,搜索找到六个匹配项。第一次匹配尝试将找到第一个"a"。第二个匹配正好在第一个匹配b之前的第一个匹配结束的地方开始;查找零个出现的"a"并返回一个空字符串。第三次匹配并不完全在第二次匹配结束的地方开始,因为第二次匹配返回了一个空字符串。相反,它会在第一个"b"之后的一个字符之后开始。第三个匹配找到两次出现的"a"并返回"aa"。第四个匹配尝试从第二个b之前的第三个匹配结束的地方开始,并返回一个空字符串。第五次匹配尝试再次使一个字符前进,使其在第三个"b"之前开始并返回一个空字符串。第六个匹配项在最后一个"b"之后开始,并再次返回一个空字符串。

using System;
using System.Text.RegularExpressions;

public class Example
{
   public static void Main()
   {
      string pattern = "a*";
      string input = "abaabb";
      
      Match m = Regex.Match(input, pattern);
      while (m.Success) {
         Console.WriteLine("'{0}' found at index {1}.", 
                           m.Value, m.Index);
         m = m.NextMatch();
      }
   }
}
// 该示例显示以下输出:
//       'a' found at index 0.
//       '' found at index 1.
//       'aa' found at index 2.
//       '' found at index 4.
//       '' found at index 5.
//       '' found at index 6.
AIR780E二次开发点灯(LuatOS) Air780E的LuatOS点灯教程,二次开发教程,可用于所有ec618平台,无需SDK 阅读详情

相关推荐

Selenium自动化测试遇到shadow-root元素?3种实用解决方案帮你搞定

本文针对Selenium自动化测试中遇到shadow-root元素难以定位的常见问题,提供了三种实用的解决方案。详细阐述了通过JavaScript直接穿透Shadow DOM、利用浏览器工具快速获取JS Path以及使用Python第三方库进行优雅封装的方法,并分享了提升脚本健壮性的实战策略与最佳实践,帮助测试人员有效应对现代Web组件化开发带来的挑战。

code8的博客 408

【C#进阶三】C#正则表达式的使用及常用案例(Regex.IsMatch、Regex.Match,match.NextMatch、Regex.Matches、Regex.Replace等)(实践篇)

通过调用 Regex 类的静态方法。 方法参数包含输入字符串和正则表达式模式。 正则表达式引擎会缓存静态方法调用中使用的正则表达式,这样一来,重复调用使用同一正则表达式的静态正则表达式方法将提供相对良好的性能。 通过实例化Regex 对象,采用的方式是将一个正则表达式传递给类构造函数。...

QHCV的博客 5964

Apollo&Carla联合仿真基本操作

基于UE4开发的开源无人驾驶仿真器PythonAPI自动驾驶传感器(还有理想化的collision detection传感器)用于规划和控制的快速仿真地图生成交通场景(open scenario)仿真ROS集成自动驾驶baseline0.9.15新特性新的车型以及地图基于Omniverse的素材导入基于OSM的三维场景生成。

SLAM小土堆 3799

在循环体中输入不相匹配的数据 出现InputMismatchException异常 一直死循环怎么办

是因为你的输入流无法被你当前的设置的输入流相匹配,所以会一直出现死循环异常报错 可以在ctach语句块里新建一个String类型的 input.next() 输入流来接受这个不匹配的流 从而使下次循环时可以再次正常接受键盘的数据,在这里netx()的作用就是清空(接受)前面输入 的数字,避免原先输入的值影响后面的值。 ...

qq_45094114的博客 398

Qt OpenGL 3D 点云数据显示

在Qt中使用OpenGL显示3D点云数据是一个常见的需求,特别是在计算机视觉、机器人学和三维重建等领域。下面我将介绍一个基本的实现方案。

深之JohnChen的专栏 1236

【新手必看】挖漏洞流程指南,黑客手把手教你挖漏洞月入过万!收藏这篇就够了!(附学习笔记)

【新手必看】挖漏洞流程指南,黑客手把手教你挖漏洞月入过万!收藏这篇就够了!(附学习笔记)【新手必看】挖漏洞流程指南,黑客手把手教你挖漏洞月入过万!收藏这篇就够了!(附学习笔记)

weixin_57514792的博客 1103

c# 正则循环

for (int i = 0; i   { MatchCollection mc = Regex.Matches(html, @"(?[\s\S]*?)",RegexOptions.IgnoreCase);   string chulihtml = "";   foreach (Match m in mc)   {   chulihtml = m.Groups["text"].V

半路程序员 380

Ubuntu零基础入门到精通【1.1讲】:什么是 Ubuntu?一文带你彻底搞懂!

🏆 本文收录于 《滚雪球学 Ubuntu》 专栏。 本专栏面向有一定计算机基础,但尚未系统学习 Linux / Ubuntu 的读者,采用“滚雪球式学习法”:先装好、再会用、再理解、再优化、再实战,带你从第一次进入 Ubuntu 桌面 / 终端开始,逐步掌握 Ubuntu 的日常使用、命令操作、软件安装、系统配置、开发环境搭建与服务器部署能力。

**My Coding Family** 5687

通用 正则表达式 C# (.NET)Regex 总结

【参考】C#正则表达式Regex类的用法    语法:     1. new System.Text.RegularExpressions.Regex("\\$\\d{1,2}\\}").Matches(content)       2. System.Text.RegularExpressions.Regex reg = new System.Text.Re...

weixin_34313182的博客 463

PCL点云DBSCAN聚类算法:基于密度的点云聚类

核心点是在给定半径内拥有足够多邻居点的点,边界点是在给定半径内没有足够多邻居点但是位于核心点的邻域内的点,噪声点是既不是核心点也不是边界点的点。本文将介绍PCL中的DBSCAN(基于密度的空间聚类应用噪声)算法,用于点云数据的聚类。上述示例代码首先从PCD文件中读取点云数据,并设置了DBSCAN聚类的参数,包括邻域搜索半径(epsilon)和邻域内最小点数(min_points)。需要注意的是,示例代码中的点云数据格式为pcl::PointXYZ,如果使用其他类型的点云数据,需要相应地修改代码。

LpmShell的博客 1237

cherry使用MCP协议Streamable HTTP实践

摘要:Streamable HTTP协议是针对传统HTTP+SSE传输方式的改进方案,解决了连接恢复、服务器资源占用和单向通信等问题。该协议基于普通HTTP实现,支持无状态服务器、纯HTTP服务和多轮对话,同时兼容现有基础设施。通过演示展示了服务端和客户端的配置方法,体现了其灵活性和实用性。MCP(多轮对话协议)作为扩展LLM能力的关键技术,代表着未来交互式AI的发展趋势。

全网120W+关注AI拉呱,专注人工智能以及科技前沿! 562

Java regex正则表达式类似死循环问题

Java regex正则表达式类似死循环问题,详见:http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6988218 这个问题其实是由于正则表达式很复杂时,java regex复杂度过高(复杂度成指数级),导致类似死循环的问题。 测试代码: // public static void main(String[] args) {

flysharkym的专栏 5662

大唐杯5G考前冲刺篇(回顾全文重点必看)

大唐杯习题复习指南

nimo观察者 1万+

Match类

Match类   Regex在匹配的时候,常常会返回一个Match类的对象,今天就来看看怎么玩这个对象。 一、属性 Captures   按从里到外、从左到右的顺序获取由捕获组匹配的所有捕获的集合(如果正则表达式用 RegexOptions..::.RightT...

191

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

Regex正则表达式之Shared、NextMatch、IsMatch. (二)

原文地址:http://www.dotnetperls.com/regex-match-vbnet Shared.  A Regex object requires time to be created. We can instead share Regex objects, with the shared keyword. A shared Regex object is faster th

悠悠76的博客 1526

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

C# 获取字符串中的数字

string s = "-112315-125-56()5555"; 第一种方法             MatchCollection results = Regex.Matches(s, @"[0-9]+", RegexOptions.IgnoreCase | RegexOptions.Multiline);             string str = "";

Swarb的博客:低头做事,抬头做人 1213

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

[C#][正则表达式]寻找匹配的Groups的几种方法

寻找匹配的Groups的几种方法示例: // // 两种大方法: //   MatchCollectionMatches //   MatchMatch方式 // // 第一大种: MatchCollection mMCollection =   oRegex.Matches(strHTMLContent);  if(mMCollection.Count > 1) {  foreach(Match

软件开发资料汇总 358

c# regex Match Matches MatchCollection 用法

利用Match类和MatchCollection类,可以获得通过一个正则表达式实现的每一个匹配的细节。Match表示一次匹配,而MatchCollection类是一个Match对象的集合,其中的每一个对象都表示了一次成功的匹配。 我们可以使用Regex对象的Match()方法和Matches()方法来检索匹配。 1.Match()方法 前三种方法是实例方法,后两种是静态方法,所...

shan1774965666的专栏 9381

C# 使用正则表达式

/* 通过检查返回的 Match 对象的 Success 属性值,可以确定是否在输入字符串中找到了正则表达式模式。 * 如果匹配成功,则返回的 Match 对象的 Value 属性将包含 input 中与正则表达式模式匹配的子字符串。 * 如果未找到匹配项,其值将为 String.Empty。

red7799的专栏 423

全面剖析C#正则表达式

        到目前为止,许多的编程语言和工具都包含对正则表达式的支持,当然.NET也不例外,.NET基础类库中包含有一个名称空间和一系列可以充分发挥规则表达式威力的类。         正则表达式的知识可能是不少编程人员最烦恼的事儿了。如果你还没有规则表达式方面的知识的话,建议从正则表达式的基础知识入手。前参见 正则表达式语法。         下面就来研究C#中的正则表达式,C#中的正则表达

BigMonster's Blog 1286
上一篇: StringSplitOptions枚举
下一篇: RegexOptions枚举
.NET跨平台
博客等级 码龄15年 6066粉丝 738原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值