博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
正则表达式中-分组构造
阅读量:6894 次
发布时间:2019-06-27

本文共 1946 字,大约阅读时间需要 6 分钟。

分组构造

捕获或非捕获

匹配的子表达式

捕获

命名匹配的子表达式

捕获

平衡组定义

捕获

非捕获组

非捕获

组选项

非捕获

零宽度正预测先行断言

非捕获

零宽度负预测先行断言

非捕获

零宽度正回顾后发断言

非捕获

零宽度负回顾后发断言

非捕获

非回溯子表达式

非捕获

 

表4.常用分组语法
分类 代码/语法 说明
捕获 (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

 

转载地址:http://dmzdl.baihongyu.com/

你可能感兴趣的文章
配置管理小报100122:能者上、平者让、庸者下
查看>>
配置管理小报100204:产品路线图
查看>>
开发 Windows RT 桌面应用(来自 Surface RT)
查看>>
[ERROR] InnoDB: innodb-page-size mismatch in data
查看>>
异常发生时代码执行情况
查看>>
原生JS实现图片懒加载
查看>>
VS2012遇到一个问题
查看>>
MySQL扩展从php 5.5开始弃用
查看>>
Crash日志的分析基础
查看>>
Nginx+Https配置+Tomcat
查看>>
Real Time Web Solution for Chat by MVC SignalR Hub
查看>>
iPhone6如何进入DFU模式
查看>>
Python机器学习笔记(一):64位win7安装Python+numpy+matplotlib
查看>>
如何调整查询关键词的最大长度?
查看>>
基于宏天Est平台开发CRM系统效果预览图
查看>>
5分钟入门Elasticsearch, 从如何安装,到索引和查询(基于Window系统)
查看>>
mysql /* Authentication plugin 'caching_sha2_password' cannot be loaded: 找不到指定的模块。 */...
查看>>
[新手向视频]新版PyCharm创建项目为什么会有问题
查看>>
使用weinre远程调试网页
查看>>
ES6 异步编程之 Promise 从认识到使用
查看>>