1
50
警告 :不包括非捕获组的左括号(?=) 更新 我不经常使用PCRE,因为我通常使用真实的东西;),但是 PCRE's docs 显示与Perl相同的内容:
如果PCRE偏离了PerlRegex的兼容性,可能应该重新定义缩写词——“Perl同源正则表达式”、“PerlComparable正则表达式”或其他什么。或者只是剥离意义的字母。 |
2
16
是的,这对你感兴趣的所有语言都有很好的定义:
对于其他语言(Python、Ruby和其他语言),您很可能会找到类似的结果。 你说首先列出内部捕获组同样合乎逻辑,你是对的——这只是一个在关闭而不是打开时索引的问题,parens。(如果我理解正确的话)。但这样做不太自然(例如,它不遵循阅读方向惯例),因此通过观察确定哪个捕获组将处于给定的结果索引更困难(可能不太明显)。 将整个匹配字符串放在0位置也是有意义的-主要是为了一致性。它允许整个匹配的字符串保持在相同的索引中,而不管从ReGEX到ReGEX的数量捕获组,而不管实际上匹配任何对象的捕获组的数目(例如Java将折叠匹配组数组的长度,因为每个捕获组不匹配任何内容(例如,SOM)。就像“A(.*)模式”)。您可以随时检查捕获“group”结果[捕获“group”结果“length-2”,但这并不能很好地将语言转换为Perl,后者动态创建变量($1、$2等)(当然,Perl是一个坏例子,因为它对匹配的表达式使用了$&但是您得到了这个想法:)。 |
3
8
我知道每个regex风格的数字都是按照左括号出现的顺序分组的。外部集团在其包含的子集团之前被编号只是一个自然结果,而不是明确的政策。 有趣的是 命名组 . 在大多数情况下,它们遵循相同的策略,按照paren的相对位置进行编号——名称只是编号的别名。但是,在.NET正则表达式中,命名组与编号组分开编号。例如:
实际上, 数 是的别名 名称 ;分配给命名组的编号从“实际”编号组离开的位置开始。这似乎是一个奇怪的策略,但有一个很好的理由:在.NET正则表达式中,可以在正则表达式中多次使用同一组名。这使得正则表达式像来自 this thread 对于匹配来自不同地区的浮点数字:
如果有一个千位分隔符,那么无论regex的哪个部分匹配它,它都将保存在组“千”中。同样,十进制分隔符(如果有)也将始终保存在“十进制”组中。当然,在没有可重用命名组的情况下,有一些方法可以识别和提取分隔符,但是这种方法非常方便,我认为这不仅仅是证明奇怪的编号方案是正确的。 还有Perl5.10+,它给了我们对捕获组的更多控制,而我不知道该怎么做。D |
4
4
在我工作过的所有平台中,按照左paren的顺序捕获是标准的。(Perl、PHP、Ruby、Egrep) |
lonix · 使用sed从JSON中提取非贪婪正则表达式 1 年前 |
Dima Malko · 如何在指定符号前添加符号? 2 年前 |
shekharsabale · 从列表元素捕获子字符串 2 年前 |
Katia · 根据特定规则进行多行匹配 2 年前 |
MHA · Pandas str.extract()以字母结尾的数字 2 年前 |
Slava Vir · 如何查找后面“/”之间的最后一组 2 年前 |