首页
学习
活动
专区
圈层
工具
发布

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

今天遇到一个正则匹配的问题,忽然翻到有捕获组的概念,手册上也是一略而过,百度时无意翻到C#和Java中有对正则捕获组的特殊用法,搜索关键词有PHP时竟然没有相关内容,自己试了一下,发现在PHP中也是可行的...什么是捕获组 我们先看一下PHP的正则匹配函数 int preg_match ( string $pattern , string $subject [, array &$matches [, int...PHP会为它编号,从1开始。至于为什么会从1开始,那是因为PHP把匹配到的完整字符串编号为0。 如果有多个括号或嵌套括号,按左边括号出现的顺序来进行编号,如图: ?...按图中的匹配模式匹配时,捕获组的123号分别是红绿蓝。 捕获组的忽略与命名 我们还可以阻止PHP为匹配组的编号:在匹配组中模式前加  ?: $mode = '/a=(\d+)b=(?...非捕获组的用法: 为什么称为非捕获组呢?那是因为它们有捕获组的特性,在匹配模式的()中,但是匹配时,PHP不会为它们编组,它们只会影响匹配结果,并不作为结果输出。 /d(?

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

    PHP中有关正则表达式的函数集锦

    当时初学PHP根本不知道PHP有专门抓包的工具,就像Simple_html_dom.php(在我的其他博文中有提到),之前根本就不知道有这东西,所以就自己废着劲去学习正则表达式,然后再学习PHP中正则表达式的函数是如何使用的...下面是当时学习PHP中的正则表达式所总结的内容,和大家分享一下,欢迎大家批评指正 PHP中的正则表达式函数   在PHP中有两套正则表达式函数库。...])     preg_match ()函数在$content字符串中搜索与$pattern给出的正则表达式相匹配的内容。...$matches[0]将包含与整个模式匹配的文本,$matches[1]将包含第一个捕获的与括号中的模式单元所匹配的内容,以此类推。该函数只 作一次匹配,最终返回0或1的匹配结果数。    ...进行全局正则表达式匹配   1.preg_match_all()   与preg_match()函数类似。如果使用了第三个参数,将把所有可能的匹配结果放入。

    1.4K50

    php正则表达式的分组捕获

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

    1.6K30

    看代码学安全(8 )preg_replace函数之命令执行

    最近我们小组正在做一个PHP代码审计的项目,供大家学习交流,我们给这个项目起了一个名字叫 PHP-Audit-Labs 。...这里涉及到正则表达式反向引用的知识,即此处的 \\1 ,大家可以参考 W3Cschool 上的解释: 反向引用 对一个正则表达式模式或部分模式 两边添加圆括号 将导致相关 匹配存储到一个临时缓冲区中,所捕获的每个子匹配都按照在正则表达式模式中从左到右出现的顺序存储...缓冲区编号从 1 开始,最多可存储 99 个捕获的子表达式。每个缓冲区都可以使用 '\n' 访问,其中 n 为一个标识特定缓冲区的一位或两位十进制数。 本题官方给的 payload :/?....die("Long."); } if(preg_match("/[A-Za-z0-9]+/",$code)){ die("NO."); }...die("Too Long."); } if(preg_match("/[A-Za-z0-9_]+/",$code)){ die("Not Allowed

    2.4K30

    【Java】已解决:java.util.zip.DataFormatException

    当解压缩的数据格式不符合预期时,Java的java.util.zip包会抛出此异常。本文将详细分析该异常的背景、可能的原因、错误和正确的代码示例,并给出相关的注意事项,帮助您解决这一问题。...如果解压缩时提供的数据格式不正确(如未按照正确的压缩方式压缩,或数据在传输中被截断),那么就可能会出现DataFormatException。...; try { inflater.inflate(result); } catch (DataFormatException e) { e.printStackTrace(); // 捕获...Inflater.inflate()方法抛出了DataFormatException,表明数据格式不符合预期。...四、正确代码示例 为了正确解压缩数据并避免DataFormatException,需要确保传递给Inflater的数据是有效的,并且符合预期的格式。

    34710

    正则表达式中的子组模式

    作者:西瓜玩偶(racnil070512 at hotmail dot com) 一、基础知识 在PCRE正则表达式中,我们可以利用圆括号定义一个子组,我们可以使用preg_match函数(其他函数的信息请参考...PHP官方API文档)的第三个参数捕获圆括号中匹配的内容: preg_match('#color\h*:\h*([A-Za-z]*)#', 'color: red', $matches); print_r...PCRE中的子组的功能其实非常强大,但是PHP官方的API文档并没有对齐作过多的介绍。下面的文章尝试对PCRE中的子组功能做一个初步的介绍。...三、非捕获子组 有些时候子组只是用来描述“分支”的匹配的,我们并不想让最后的$matches里面出现括号里的内容,此时可以用非捕获子组(?:)告诉正则表达式解析器,它不需要被捕获: '#(?...十、重置分支 这一点在PHP官方文档中已经提到了: '#(?

    2K120
    领券