正则表达式中-分组构造
分组构造 |
捕获或非捕获 |
---|---|
匹配的子表达式 |
捕获 |
命名匹配的子表达式 |
捕获 |
平衡组定义 |
捕获 |
非捕获组 |
非捕获 |
组选项 |
非捕获 |
零宽度正预测先行断言 |
非捕获 |
零宽度负预测先行断言 |
非捕获 |
零宽度正回顾后发断言 |
非捕获 |
零宽度负回顾后发断言 |
非捕获 |
非回溯子表达式 |
非捕获 |
分类 | 代码/语法 | 说明 |
---|---|---|
捕获 | (exp) | 匹配exp,并捕获文本到自动命名的组里 |
(?<name>exp) | 匹配exp,并捕获文本到名称为name的组里,也可以写成(?'name'exp) | |
(?:exp) | 匹配exp,不捕获匹配的文本,也不给此分组分配组号 | |
零宽断言 | (?=exp) | 匹配exp前面的位置 |
(?<=exp) | 匹配exp后面的位置 | |
(?!exp) | 匹配后面跟的不是exp的位置 | |
(?<!exp) | 匹配前面不是exp的位置 | |
注释 | (?#comment) | 这种类型的分组不对正则表达式的处理产生任何影响,用于提供注释让人阅读 |
非回溯子表达式
以下分组构造表示非回溯子表达式(也称为一个“贪婪”子表达式):
(?> Subexpression — 子表达式 )
其中子表达式为任何正则表达式模式。
通常,如果正则表达式包含一个可选或可替代匹配模式并且备选不成功的话,正则表达式引擎可以在多个方向上分支以将输入的字符串与某种模式进行匹配。 如果未找到使用第一个分支的匹配项,则正则表达式引擎可以备份或回溯到使用第一个匹配项的点并尝试使用第二个分支的匹配项。 此过程可继续进行,直到尝试所有分支。
(?> 子表达式 ) 语言构造禁用回溯。 正则表达式引擎将在输入字符串中匹配尽可能多的字符。 在没有任何进一步匹配可用时,它将不回溯以尝试备用模式匹配。 (也就是说,该子表达式仅与可由该子表达式单独匹配的字符串匹配;子表达式不会尝试与基于该子表达式的字符串和任何该子表达式之后的子表达式匹配。)
如果你知道回溯不会成功,则建议使用此选项。 防止正则表达式引擎执行不需要的搜索可以提高性能。
下面的示例阐释非回溯子表达式如何修改模式匹配的结果。 回溯正则表达式成功匹配一系列重复字符,在字边界上其后为相同字符,但非回溯正则表达式不会匹配。
using System; using System.Text.RegularExpressions; public class Example { public static void Main() { string[] inputs = { "cccd.", "aaad", "aaaa" }; string back = @"(\w)\1+.\b"; string noback = @"(?>(\w)\1+).\b"; foreach (string input in inputs) { Match match1 = Regex.Match(input, back); Match match2 = Regex.Match(input, noback); Console.WriteLine("{0}: ", input); Console.Write(" Backtracking : "); if (match1.Success) Console.WriteLine(match1.Value); else Console.WriteLine("No match"); Console.Write(" Nonbacktracking: "); if (match2.Success) Console.WriteLine(match2.Value); else Console.WriteLine("No match"); } } } // The example displays the following output: // cccd.: // Backtracking : cccd // Nonbacktracking: cccd // aaad: // Backtracking : aaad // Nonbacktracking: aaad // aaaa: // Backtracking : aaaa // Nonbacktracking: No match
作者:Cat Qi
出处:http://qixuejia.cnblogs.com/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
出处:http://qixuejia.cnblogs.com/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架
2011-01-12 C#获取本地计算机名,IP,MAC地址,硬盘ID