首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

PHP正则中的捕获组与非捕获

今天遇到一个正则匹配的问题,忽然翻到有捕获组的概念,手册上也是一略而过,百度时无意翻到C#和Java中有对正则捕获组的特殊用法,搜索关键词有PHP时竟然没有相关内容,自己试了一下,发现在PHP中也是可行的...什么是捕获组 我们先看一下PHP的正则匹配函数 int preg_match ( string $pattern , string $subject [, array &$matches [, int... $flags = 0 [, int $offset = 0 ]]] ) 前面两项是我们常用的,$pattern是正则匹配模式,$string是要匹配的字符串。...,捕获组是正则表达示中以()括起来的部分,每一对()是一个捕获组。...捕获组的反向引用 我们在用preg_replace()函数进行正则替换时,我们还可以使用 \n 或 $n 来引用第n个捕获组.

2K90
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    正则表达式 -- 捕获括号

    jQuery中充斥着大量的正则表达式,在jQuery不断改良的过程中,正则表达式的用法也在发生着变化。 其中变化最大的就是(?:pattern)的使用,当然还有?家族的一系列表达式用法。...描述: 如果正则表达式包含g标志,则该方法返回一个包含所有匹配结果的数组。 如果正则表达式没有g标志,返回和exec(str)相同的结果。...捕获括号字面理解 去捕获字符串中的括号,既然捕获了内容,就要有个地方存放。先看下下面的例子,再重新读一下exec()的描述信息。..."ca"] 至于什么时候捕获括号,什么时候非捕获括号就要视情况而定了。灵活的使用这两者会有不一样的收获。 如果有兴趣,可以看一下下面的正则表达式 rquickExpr = /^(?...:\s*()[^>]*|#([\w-]+))$/ 这个正则表达式是jQuery的入口。

    1.2K10

    正则表达式分组与捕获

    分组可以分为两种形式,捕获组和非捕获组。 捕获捕获组可以通过从左到右计算其开括号来编号 。...注意:反向引用,引用的是前面捕获组中的文本而不是正则,也就是说反向引用处匹配的文本应和前面捕获组中的文本相同,这一点很重要。...原因是捕获捕获的内容是被存储在内存中,可供以后使用,比如反向引用就是引用的内存中存储的捕获组中捕获的内容。而非捕获组则不会捕获文本,也不会将它匹配到的内容单独分组来放到内存中。...所以,使用非捕获组较使用捕获组更节省内存。在实际情况中我们要酌情选用。 分组使用 对正则表达式分组之后,就额可以通过Matcher 对象的group方法进行获取分组后匹配的值。...System.out.println(m); if(m.find()) { System.out.println(m.group(1)); } } } 0代码代表整个正则表达式的结果

    2.2K30

    js正则小结

    1,\ 斜杠用于转义,在js正则里,只有一些元字符(*,?,.等)和\本身需要转义,其他的不需要转义,如果其他的字符前面使用了\,可能会产生负面影响,比如\b,\t这些有特殊含义的转义。...此外,在js正则中,\还有一个用处在于使用new RegExp()形式创建正则对象时,比如new RegExp('a\*a'),其中*是乘以的意思,js引擎在解析该正则表达式字符串时,会消耗掉这个斜杠,...匹配除了行分隔符外的所有字符 6 捕获分组(x) \n $n RegExp.$n ()代表捕获分组,x代表的表达式所匹配的内容可以在x所有的正则中或者其他地方使用。....$2 = y,每次正则执行完后,捕获分组或挂载到RegExp对象上,并且清除上次执行的结果。 $&是一个特殊的变量,他代表是整个正则表达式匹配到的结果。也就是xy。 7 (?...:x) 非捕获分组,也就是()中的表达式捕获到分组不可在其他地方使用。'x'.replace(/(?:x)/, "$1") => "$1" 8 x(?

    7.6K50

    关于JS正则表达式0.前言1.捕获2.非捕获3.匹配模式彩蛋:

    原文来自我的github 0.前言 本文主要介绍了捕获和非捕获的概念,并举了一些例子,这些都是正则表达式在js中进阶的一些用法。...后面有彩蛋哦 1.捕获 1.1RegExp对象的相关属性 一般用()括住的就是捕获组,而且类似于算术中的括号,从左到右,逐层去括号。...在正则里面反斜杠+数字就可以做到,表示重复第n个捕获组的内容,这个n和上面$后面的数字同理: /(.)\1(.)\2/.test('高高兴兴') //TRUE,第一个和第二个相同,第三四个相同 /(.)...即是匹配结果,捕获组,匹配位置,准确来说,第一个参数是匹配结果,最后一个参数是匹配位置,中间所有的参数都是捕获组。...jQuery作者的正则,号称世界上最强的选择器sizzle,就是强大正则做出来的(晚点再更新sizzle解读)

    1.6K20

    php正则表达式的分组捕获

    经过测试,发现php正则表达式获取分组捕获是从$0开始,而平时工作中JavaScript中的正则是$1..$9 在提取项目代码中的汉字时,因为当时操作速度很快(赶时间),很担心当时.properties...一多就容易出错,而且行与行之间靠的太近了,字又太小… 突然想起来,觉得php可以节省一点时间,读取文件,然后将关键的地方标红… 然后就开始了:php读取文件,然后逐行的读取,使用正则表达式匹配符合{\d...> 27: 参考问题: 用 PHP 读取文件的正确方法 掌握 PHP 中的正则表达式(1) 掌握 PHP 中的正则表达式(2) 准备趁春节放假那几天再把《精通正则表达式》...好好温习温习,深入研究一下php、perl、python中正则的异同点。

    1.4K30

    JS事件,你真的懂吗(捕获,冒泡)?

    说到js事件大家肯定都知道,那么今天讲一点大家不知道的(假设大家不知道?)。 所有的js事件都会分为两个阶段捕获和冒泡。...那么问题来了,我们通常看到的事件都是直接触发之后就执行了,那么我们怎么才能看到事件的捕获和冒泡都是怎么进行的呢,这里给大家准备了一个例子 addEventListener() 例子之前首先给大家简单介绍一下...true表示监听事件的捕获阶段,false表示监听事件的冒泡阶段。 返回值 没有返回值 示例: <!...其次是inner捕获阶段 然后是inner冒泡阶段 最后是outer冒泡阶段 由此我们可以看到,事件触发的时候实际上都是有捕获和冒泡阶段的,并且捕获阶段会从最外层的父级元素开始捕获,一直捕获到最后触发事件的那个元素点才会停止...并且事件的触发是先捕获,在冒泡。 阻止事件冒泡 事件的冒泡会让我们实现某些功能的时候产生阻碍,那么我们怎么怎么阻止事件的冒泡呢,这个时候就会用到一个方法。

    2.4K20

    Java 正则表达式的捕获

    捕获组分为: 普通捕获组(Expression) 命名捕获组(?Expression) 普通捕获组 从正则表达式左侧开始,每出现一个左括号"("记做一个分组,分组编号从 1 开始。...命名捕获组 每个以左括号开始的捕获组,都紧跟着 ?,而后才是正则表达式。 对于时间字符串:2017-04-25,表达式如下: ? 有 4 个命名的捕获组,分别是: ?...命名的捕获组同样也可以使用编号获取相应值。 ? PS 非捕获组 在左括号后紧跟 ?:,而后再加上正则表达式,构成非捕获组 (?:Expression)。...这个正则表达式虽然有四个左括号,理论上有 4 个捕获组。但是第一组 (?:\d{4}),其实是被忽略的。当使用 matcher.group(4) 时,系统会报错。 ? ?...总结 ▼ 普通捕获组使用方便; 命名捕获组使用清晰; 非捕获组目前在项目中还没有用武之地。

    1.2K30
    领券