正则表达式中的平衡组

理解记录:

(?<g>exp1) 遇到匹配exp1的情况在对组g 入栈

(?<-g>exp2) 遇到匹配exp2的情况对组g 出栈

(?(g)(?!)) 对组g进行一次断言,如果不空为,则失败 反之 匹配成功

或者这样解读, (?!) 要求(g)要为空 否则就返回匹配失败,它是 ‘零宽度负预测先行断言’

如果栈 那么 不会为负数吧,

原文地址:https://www.cnblogs.com/ProjectDD/p/10662463.html

时间: 2024-10-02 20:26:03

正则表达式中的平衡组的相关文章

Java正则表达式中的捕获组的概念(转)

要弄清这三个方法,首先要弄清Java正则表达式中的捕获组的概念.捕获组也就是Pattern中以括号对“()”分割出的子Pattern.至于为什么要用捕获组呢,主要是为了能找出在一次匹配中你更关心的部分.捕获组可以通过从左到右计算其开括号来编号.例如,在表达式 "(x)(y\\w*)(z)" 中,存在三个这样的组:  1.  x2.  y\\w*3.  z组零始终代表整个表达式.之所以这样命名捕获组是因为在匹配中,保存了与这些组匹配的输入序列的每个子序列.捕获的子序列稍后可以通过 Bac

正则表达式中 group groups区别

先看代码instance: 1 >>> a="123abc456" 2 >>> import re 3 >>> print(re.search("([0-9]*)([a-z]*)([0-9]*)", a).group(0)) 4 123abc456 5 >>> print(re.search("([0-9]*)([a-z]*)([0-9]*)", a).group(1)) 6

正则表达式(二) - 零宽断言与懒惰匹配以及平衡组

小括号的作用 分类 代码/语法 说明 捕获 (exp) 匹配exp,并捕获文本到自动命名的组里 (?<name>exp) 匹配exp,并捕获文本到名称为name的组里,也可以写成(?'name'exp) (?:exp)   匹配exp,不捕获匹配的文本,也不给此分组分配组号 零宽断言 (?=exp) 匹配exp前面的位置 (?<=exp)  匹配exp后面的位置 (?!exp)  匹配后面跟的不是exp的位置 (?<!exp) 匹配前面不是exp的位置 注释 (?#comment)

C# 通过正则平衡组匹配scrip标签中的json数据

前段在HTML页面中抓数据时碰到的一些问题,有些数据直接隐藏在script标签中了.于是想到了平衡组,分享下. 先通过HTML Agility Pack (非常强大的HTML解析工具)得到具体的HTML内容,通过具体的路径匹配所有的script标签,然后获取你想要的某个script内容,如下图: 开始通过平衡组匹配: string pattern = @"(?isnx) \[ (?> \[(?<Open>) | \](?<-Open>) | ((?![\[\]]).

正则表达式 零宽断言 负向零宽断言 平衡组/递归匹配

零宽断言 用于查找在某些内容(但并不包括这些内容)之前或之后的东西,像\b,^,$那样用于指定一个位置,这个位置应该满足一定的条件(即断言),因此它们也被称为零宽断言. (?<=exp)myexp(?=exp1) 负向零宽断言 与零宽断言类似 (?<!exp)myexp(?!exp1) 自己用上面的例子测试下 (?<=<(\w+)>).*(?=<\/\1>) 平衡组/递归匹配 这个看起来有点复杂,其实就是 push/pop. 这里很像编程语言,或者说像个语法分析器

正则表达式中-分组构造

分组构造 捕获或非捕获 匹配的子表达式 捕获 命名匹配的子表达式 捕获 平衡组定义 捕获 非捕获组 非捕获 组选项 非捕获 零宽度正预测先行断言 非捕获 零宽度负预测先行断言 非捕获 零宽度正回顾后发断言 非捕获 零宽度负回顾后发断言 非捕获 非回溯子表达式 非捕获 表4.常用分组语法 分类 代码/语法 说明 捕获 (exp) 匹配exp,并捕获文本到自动命名的组里 (?<name>exp) 匹配exp,并捕获文本到名称为name的组里,也可以写成(?'name'exp) (?:exp) 匹配

.NET正则基础之——平衡组

1        概述 平衡组是微软在.NET中提出的一个概念,主要是结合几种正则语法规则,提供对配对出现的嵌套结构的匹配..NET是目前对正则支持最完备.功能最强大的语言平台之一,而平衡组正是其强大功能的外在表现,也是比较实用的文本处理功能,目前只有.NET支持,相信后续其它语言会提供支持. 平衡组可以有狭义和广义两种定义,狭义平衡组指.NET中定义的(?<Close-Open>Expression)语法,广义平衡组并不是固定的语法规则,而是几种语法规则的综合运用,我们平时所说的平衡组通常指

.NET正则平衡组

1        概述 平衡组是微软在.NET中提出的一个概念,主要是结合几种正则语法规则,提供对配对出现的嵌套结构的匹配..NET是目前对正则支持最完备.功能最强大的语言平台之一,而平衡组正是其强大功能的外在表现,也是比较实用的文本处理功能,目前只有.NET支持,相信后续其它语言会提供支持. 平衡组可以有狭义和广义两种定义,狭义平衡组指.NET中定义的(?<Close-Open>Expression)语法,广义平衡组并不是固定的语法规则,而是几种语法规则的综合运用,我们平时所说的平衡组通常指

正则表达式中的符号含义

. 匹配除换行符以外的任意字符\w 匹配字母或数字或下划线或汉字\s 匹配任意的空白符\d 匹配数字\b 匹配单词的开始或结束^ 匹配字符串的开始$ 匹配字符串的结束[\u4e00-\u9fa5]{2,20} 匹配2-20个汉字* 重复零次或更多次+ 重复一次或更多次? 重复零次或一次{n} 重复n次{n,} 重复n次或更多次{n,m} 重复n到m次\W 匹配任意不是字母,数字,下划线,汉字的字符\S 匹配任意不是空白符的字符\D 匹配任意非数字的字符\B 匹配不是单词开头或结束的位置[^x]