除捕获组的语法外,其它的(?...)语法都不是捕获组的验证

在一篇正则表达式技术文档中看到下面内容:

“外需要说明的一点是,除(Expression)和(?<name>Expression)语法外,其它的(?...)语法都不是捕获组。”
这个内容是好理解的,但疑惑的是,该文章作者在另一篇相关正则的技术文章中,其中一个这样的实例,着实让我迷惑了一番:

文本内容

<td>a</td><td>b</td> 

正则表达式

(?is)<td>(?:(?!</td>).)*</td> 

注意上面正则表达式的代码,他对“(?!</td>).”进行“强制非捕获组”,我在短信中告诉他,可以这样写:(?is)<td>((?!</td>).)*</td>
两天仍未见他回复,于是在回过头来研究一下他代码,起初我将重点放在“(?!</td>)”这个括号算不算捕获组。但是在看一次上面技术文章的代码我才反应过来。他不是针对(?!</td>)强制为非捕获组,而是将(?!</td>).强制为非捕获组,于是我就做了下面的测试:

文本内容

<td>a</td><td>a</td>

正则表达式

<td>((?!</td>).)*</td><td>(\1)*</td>

匹配结果

<td>a</td><td>a</td>

这就证明,如果不对“(?!</td>).”进行强制为非捕获组,它是会捕获的,而这个捕获,我根本不需要它。
下面,我在测试一下,除了(Expression)和(?<name>Expression)语法外,其它的,如环视,它算不算捕获组。

文本内容

<td>a</td><td>a</td> 

正则表达式

<td>((?!</td>).)*</td><td>(\2.)*</td>

匹配结果:不匹配
如有不同见解,欢迎讨论。

(0)

相关推荐

  • 除捕获组的语法外,其它的(?...)语法都不是捕获组的验证

    在一篇正则表达式技术文档中看到下面内容: "外需要说明的一点是,除(Expression)和(?<name>Expression)语法外,其它的(?...)语法都不是捕获组." 这个内容是好理解的,但疑惑的是,该文章作者在另一篇相关正则的技术文章中,其中一个这样的实例,着实让我迷惑了一番: 文本内容 <td>a</td><td>b</td> 正则表达式 (?is)<td>(?:(?!</td>).)*&

  • Python的基础语法和输入输出函数你都了解吗

    目录 基础语法 1. 注释: 2.行和缩进 3.标识符和关键字 保留字: 1.常用数据和数据类型 2.类型操作 输入和输出函数 1.输出函数 2.输入函数 总结 基础语法 1. 注释: 注释在解释器中是不会被转译成机器码,它的存在不影响程序的功能 1.单行注释: 在注释内容前加# 2.多行注释: '''多行注释内容'''或者 """多行注释内容""" 用注释内容对代码进行说明,提高代码的可读性. 2.行和缩进 1.python 代码一条占一行 2

  • 正则表达式之捕获组/非捕获组介绍

    捕获组 语法: 字符  描述 示例 (pattern) 匹配pattern并捕获结果,自动设置组号. (abc)+d 匹配abcd或者abcabcd (?<name>pattern) 或 (?'name'pattern) 匹配pattern并捕获结果,设置name为组名. \num 对捕获组的反向引用.其中 num 是一个正整数. (\w)(\w)\2\1 匹配abba \k< name > 或 \k' name ' 对命名捕获组的反向引用.其中 name 是捕获组名. (?<

  • 浅谈PHP正则中的捕获组与非捕获组

    今天遇到一个正则匹配的问题,忽然翻到有捕获组的概念,手册上也是一略而过,百度时无意翻到C#和Java中有对正则捕获组的特殊用法,搜索关键词有PHP时竟然没有相关内容,自己试了一下,发现在PHP中也是可行的,于是总结一下,分享的同时也希望有大神和细心的学习者找到我理解中出现的问题. 什么是捕获组 我们先看一下PHP的正则匹配函数 int preg_match ( string $pattern , string $subject [, array &$matches [, int $flags =

  • 正则 捕获组(capture group)

    捕获组有两种形式 一种是普通的捕获组,不产生歧义的情况下,后面简称捕获组,语法规则:(expression): 另一种是命名捕获组,语法规则:(?<name>expression)或者(?'name'expression),这两种写法是等价的. 1.编号规则 如果没有显式为捕获组命名,即没有使用命名捕获组,那么需要按数字顺序来访问所有捕获组 在只有普通捕获组的情况下,捕获组的编号是按照"("出现的顺序,从左到右编号的 (\d{4})-(\d{2}-(\d\d)) 1    

  • PHP正则表达式之捕获组与非捕获组

    今天遇到一个正则匹配的问题,忽然翻到有捕获组的概念,手册上也是一略而过,百度时无意翻到C#和Java中有对正则捕获组的特殊用法,搜索关键词有PHP时竟然没有相关内容,自己试了一下,发现在PHP中也是可行的,于是总结一下,分享的同时也希望有大神和细心的学习者找到我理解中出现的问题. 什么是捕获组 捕获组语法: 字符  描述 示例 (pattern) 匹配pattern并捕获结果,自动设置组号. (abc)+d 匹配abcd或者abcabcd (?<name>pattern) 或 (?'name'

  • PHP之正则表达式捕获组与非捕获组(详解)

    在项目开发过程中正则表示经常会用到,可以说会正则表达式是每个程序员最基本的要求,初学者在刚接触正则表达式都感到很吃力.最近看到一位朋友的博客写的<PHP正则表达式>获益颇多,在章节对通配符以及捕获数据非常感兴趣.这两章节刚好也涉及到了正则表达式的捕获组和非捕获组的内容,以此来分析这方面的内容 我们知道,在正则表达式下(x) 表示匹配'x'并记录匹配的值.这只是比较通俗的说法,甚至说这是不严谨的说法,只有()捕获组形式才会记录匹配的值.非捕获组则只匹配,不记录. 捕获组: (pattern) 这

  • JS正则表达式一条龙讲解(从原理和语法到JS正则)

    正则啊,就像一座灯塔,当你在字符串的海洋不知所措的时候,总能给你一点思路:正则啊,就像一台验钞机,在你不知道用户提交的钞票真假的时候,总能帮你一眼识别:正则啊,就像一个手电筒,在你需要找什么玩意的时候,总能帮你get你要的东西... -- 节选自 Stinson 同学的语文排比句练习<正则> 欣赏了一段文学节选后,我们正式来梳理一遍JS中的正则,本文的首要目的是,防止我经常忘记正则的一些用法,故梳理和写下来加强熟练度和用作参考,次要目的是与君共勉,如有纰漏,请不吝赐教,良辰谢过. 本文既然取题

  • JavaScript正则表达式上之基本语法(推荐)

    相关阅读: js正则表达式基本语法(精粹) 正则表达式语法 一个正则表达式就是由普通字符(例如字符 a 到 z)以及特殊字符(称为元字符)组成的文字模式.该模式描述在查找文字主体时待匹配的一个或多个字符串.正则表达式作为一个模板,将某个字符模式与所搜索的字符串进行匹配. 定义 JavaScript种正则表达式有两种定义方式,定义一个匹配类似 <%XXX%> 的字符串 1. 构造函数 复制代码 代码如下: var reg=new RegExp('<%[^%>]+%>','g')

  • 深入理解正则表达式语法知识

    4.选择与分组 (1).分组 字符组[]:表示匹配若干个字符之一 字符组可以浅显的理解为一些字符的组合,字符组与普通字符的区别在于:abc普通字符表示匹配a接下来b接下来c而字符组[abc]表示在同一位置匹配a或者b或者c:由于字符组本身的含义也决定了可以将这个字符组看成是一个普通的特殊字符. 普通性:普通是因为它也表示在一个位置上匹配一个字符对单个字符的操作在其上面也是可以起作用的:如:[a-z]{6}; 特殊性:特殊是因为,1.其他字符在其内外的含义可能不同如:-,.,^等,2.在同一个位置

随机推荐