preg_match_all 结果排序之PREG_SET_ORDER参数

想重装OpenClaw?先执行这4步彻底卸载,避免配置冲突 在重装OpenClaw之前,彻底卸载是非常重要的一步。如果不彻底卸载,可能会导致: - 残留的配置文件与新安装的版本冲突 - 旧的依赖包干扰新的安装过程 - 服务冲突导致启动失败 - 数据混乱影响系统稳定性 阅读详情

今天在写通用采集类的时候,需要用到正则处理一些匹配,比较常用的当然就是preg_match_all了,以前也经常使用它来进行正则的匹配。刚在查看preg_match_all的手册的时候,注意到原来preg_match_all有一个PREG_SET_ORDER的参数,是用于设置匹配后返回的数组的顺序。

int preg_match_all ( string pattern, string subject, array matches [, int flags] )

参数flags为以下3个:PREG_PATTERN_ORDER PREG_SET_ORDER PREG_OFFSET_CAPTURE 其中PREG_PATTERN_ORDER为默认参数。

我们用例子来看看PREG_PATTERN_ORDER和PREG_SET_ORDER的区别。

<?php

$str = '<a href="http://www.baidu.com/">百度</a><a href="http://www.google.com/">谷歌</a><a href="http://www.caiguai.net/">怪手论坛</a>';

preg_match_all('|<a href="(.*?)">(.*?)</a>|', $str, $matches_pattern, PREG_PATTERN_ORDER);
preg_match_all('|<a href="(.*?)">(.*?)</a>|', $str, $matches_set, PREG_SET_ORDER);

print_r($matches_pattern);

print_r($matches_set);

$matches_pattern 返回的数据为:

    Array
    (
        [0] => Array
            (
                [0] => <a href="http://www.baidu.com/">百度</a>
                [1] => <a href="http://www.google.com/">谷歌</a>
                [2] => <a href="http://www.caiguai.net/">怪手论坛</a>
            )

        [1] => Array
            (
                [0] => http://www.baidu.com/
                [1] => http://www.google.com/
                [2] => http://www.caiguai.net/
            )

        [2] => Array
            (
                [0] => 百度
                [1] => 谷歌
                [2] => 怪手论坛
            )

    )

$matches_set 返回的数据为:

    Array
    (
        [0] => Array
            (
                [0] => <a href="http://www.baidu.com/">百度</a>
                [1] => http://www.baidu.com/
                [2] => 百度
            )

        [1] => Array
            (
                [0] => <a href="http://www.google.com/">谷歌</a>
                [1] => http://www.google.com/
                [2] => 谷歌
            )

        [2] => Array
            (
                [0] => <a href="http://www.caiguai.net/">怪手论坛</a>
                [1] => http://www.caiguai.net/
                [2] => 怪手论坛
            )

    )

而根据我之前阅读别人代码,就一直认为应该这么来组合结果:

    foreach ($matches_pattern[0] as $tid=>$val) {
        echo '链接:'.$matches_pattern[1][$tid];
        echo '网址:'.$matches_pattern[2][$tid];
        echo "\r\n";
    }
    /**
    *  返回结果为:
    *  
    链接:http://www.baidu.com/网址:百度
    链接:http://www.google.com/网址:谷歌
    链接:http://www.caiguai.net/网址:怪手论坛
    */

而PREG_SET_ORDER,就在于重新组合的数据,使得数组数据可以更方便的利用:

foreach ($matches_set as $v) {
    echo '链接:'.$v[1];
    echo '网址:'.$v[2];
    echo "\r\n";
}
/**
*  返回结果为:
*  
链接:http://www.baidu.com/网址:百度
链接:http://www.google.com/网址:谷歌
链接:http://www.caiguai.net/网址:怪手论坛
*/


通过阅读一些优秀的源代码,可以汲取到很多先进的思想和接触一些函数和方法的独特用法,但是由于初印象很重要,如果开始的时候接触到的是一些不全或者不足的代码,久而久之你用习惯以后,就很难发现它存在的问题,甚至认为这就应该是这样。当初我也自问过,为什么preg_match_all的匹配结果不能按照上面第二种方式组合呢?甚至我还曾写过一个函数来重新组合这个结果为第二种数据结果。php手册很重要,它是php的官方支持文档、是一个标准,看来以后要多阅读才行。谨以此为戒!

首发于:http://www.caiguai.net/thread-21-1-1.html

计算机控制技术及应用 《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。 立即下载

相关推荐

解决Linux下Questasim中代码字体非常小

Questasim的source窗口里代码字体非常小 你是不是也遇到这样的问题,在使用Vmware时,Questasim的代码字体非常小,小到完全看不见,连断点都没办法标记。 下面我给出我摸索好久的解决办法,分享给大家。 1.首先,版本是Questasim 10.7c,在Vmware16中打开,情况如下: 不多逼逼,直接上图开搞: 给textFontV2设置值:monospace 12 normal roman 这里一定要注意啦,点完apply之后,不要点ok,直接关闭窗口。 ...

SummerXRT的博客 7815

PHP与MySQL程序设计 学习笔记 第九章 字符串和正则表达式

php支持两种正则表达式实现,分别为Perl正则表达式和POSIX正则表达式实现。但POSIX版本在php 5.3.0中被废弃。 POSIX表示UNIX的可移植操作系统接口(Portable Operating System Interface for UNIX),最初是针对基于UNIX的一组标准。POSIX正则表达式语法目的是让各种编程语言中实现正则表达式的标准化。 以下为正则表达式语法部分。 最简单的正则表达式是只匹配一个字符的表达式,如g,能匹配所有带g的字符串。 可通过管道操作符|同时匹配多个正则表

tus00000的博客 816

无人机多旋翼倾转动力测试系统-适用于(eVTOL开发、缩比模型测试、科研教育)

LY-QZ-F4多旋翼倾转动力测试系统是全球首款专为倾转四旋翼设计的多自由度动力测试平台,融合高精度传感、动态倾转模拟与智能工况分析,为下一代eVTOL技术提供全维度验证工具。采用航空级应变传感器(精度±0.1% FS),同步捕获推力、扭矩、俯仰/滚转力矩,动态误差<1%。同时测试电驱动系统(单轴最大150kW)与混合动力单元(增程式),支持高压(800V)平台。通过MET数据采集软件,控制采集一体化,定制化,实时观察上百个传感器数据,实时更改测试需求。可搭配六维姿态平台,温湿度舱、振动台等环境模拟设备。

weixin_49209795的博客 874

PHP  正则函数

1. array preg_grep函数用来获得与模式匹配的数组单元,其语法格式如下如示 : array preg_grep ( string pattern , array input ) 这里,pattern 是用来匹配的正则表达式, input是用来匹配的数组。需要注意的是, preg_grep函数返回的结果使用从输入数组来的键名进行索引。 2. preg_match_all函数用来进行全局正则表达式的匹配,其语法格式如下所示 : int preg_match_all...

JineD的博客 1万+

字符串替换—牛客网(C++实现)

一.题目描述 请你实现一个简单的字符串替换函数。原串中需要替换的占位符为"%s",请按照参数列表的顺序一一替换占位符。若参数列表的字符数大于占位符个数。则将剩下的参数字符添加到字符串的结尾。 给定一个字符串A,同时给定它的长度n及参数字符数组arg,请返回替换后的字符串。保证参数个数大于等于占位符个数。保证原串由大小写英文字母组成,同时长度小于等于500。 测试样例: “A%sC%sE”,7,[‘...

qq_38358582的博客 1522

别再踩坑了!CAPL脚本里局部变量和全局变量的那些“怪事”(附CANoe实测代码)

本文深度解析CAPL脚本中局部变量和全局变量的特殊机制,揭示其与通用编程语言的差异。通过实测代码展示静态局部变量的默认行为和全局变量的节点隔离特性,并提供高效避坑指南,帮助汽车网络测试工程师避免常见陷阱。

weixin_30225755的博客 293

php preg_set_order,preg_match_all中第四个参数PREG_PATTERN_ORDER,PREG_SET_ORDER,PREG_OFFSET_CAPTURE之间的区别!...

echo"";$str="asdf{title}asdf{author}sadf{con}asfasdfasdfasf";$mode="/{(.*)}/U";$flags1=PREG_PATTERN_ORDER;//整个数组是二维数组,$arr1[0]是包括边界所构成匹配字符串的数组,$arr1[1]除去边界所构成的匹配字符串的数组;preg_match_all($mode,$str,$arr1...

weixin_39572152的博客 298

YOLOv12改进策略【卷积层】| SPD-Conv 针对小目标和低分辨率图像的检测任务

SPD-Conv是一种新的 CNN 构建模块,用于替代传统 CNN 架构中使用的步长卷积(strided convolution)和池化(pooling)层,它由空间到深度(Space-to-depth,SPD)层和非步长卷积(non - strided convolution)层组成。

Limiiiing的博客 1779

为什么你的preg_match_all只返回部分结果?深入剖析PREG_SET_ORDER标志位

解决preg_match_all结果不全问题,深入解析PREG_SET_ORDER对结果数组结构的影响。适用于多组匹配场景,厘清键位排列逻辑,提升数据提取效率。掌握关键标志位差异,值得收藏。

ProceSeed的博客 991

基于 Arduino 的鱼缸水质检测控制系统设计

本系统通过多传感器实时采集鱼缸水质参数(pH 值、温度、溶解氧、浊度),经 Arduino 主控芯片处理后,驱动执行模块自动调节水质,并通过显示模块实时展示数据。系统具备阈值报警、自动换水、温度调节、增氧等功能,适用于家庭或小型水族箱的水质智能管理。本设计提供了低成本、易扩展的鱼缸水质管理方案,适用于家庭水族箱或小型水产养殖场景,可根据实际需求调整传感器类型和控制逻辑。注:本设计如有疑问需要解惑可直接私信本人,看我个人简介。

weixin_42300449的博客 1086

树莓派 RP2350B 开发环境搭建

本文介绍了树莓派RP2350B开发环境的搭建过程。

张一西的博客 287

php正则表达式的三个参数,PHP 正则表达式 preg_match_all() 中第四个参数 PREG_PATTERN_ORDER,PREG_SET_ORDER,PREG_OFFSET_CAPTUR...

$str = "asdf{title}asdf{author}sadf{con}asfasdfasdfasf";$mode = "/{(.*)}/U";$flags1 = PREG_PATTERN_ORDER; // 默认选项。整个数组是二维数组,$arr1[0]是包括边界所构成匹配字符串的数组,$arr1[1]除去边界所构成的匹配字符串的数组;preg_match_all($mode,...

weixin_32395459的博客 279

基于STM32的设计智慧超市管理系统(带收银系统+物联网环境监测)_167

本系统主要由超市环境监测部分和商品管理部分组成。环境监测部分主控芯片采用STM32F103C8T6,主要包括温湿度传感器、烟雾传感器和空调制热开关、空调制冷开关,采集的数据通过ESP8266模块+MQTT协议上传至OneNet云平台,在OneNet云平台设计手机和电脑版本可视化页面,能够在页面上查看超市的环境信息,还能在页面上手动打开空调制热开关和空调制冷开关。商品管理部分主要由RC522-RFID读卡器、上位机组成,实现商品选购、结算、顾客的VIP会员卡注册管理等功能。

6069

【preg_match_all 结果数组深度解析】:掌握正则匹配返回结构的5个关键细节

掌握preg_match_all结果数组结构,轻松解析正则匹配多维数据。详解分组捕获、索引对应、全匹配与子组分离等5个关键细节,适用于文本提取与数据清洗。理解返回数组的层级关系,提升PHP正则处理效率,值得收藏。

PixelWander的博客 947

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

PHP正则匹配C语言源码,PHP preg_match_all():执行全局正则表达式匹配

在 PHP 中还有一个和 preg_match() 函数极为类似的函数——preg_match_all(),该函数可以搜索字符串中所有可以和正则表达式匹配的结果,语法格式如下:preg_match_all($pattern, $subject [, &$matches [, $flags = PREG_PATTERN_ORDER [, $offset = 0 ]]])参数说明如下:$pat...

weixin_42126399的博客 194

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

php preg_match_all() 用法

preg_match_all() 函数用于进行正则表达式全局匹配,成功返回整个模式匹配的次数(可能为零),如果出错返回 FALSE 。 int preg_match_all( string pattern, string subject, array matches [, int flags ] ) pattern 正则表达式 subject

没有用户名的博客 2552

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

preg_match和preg_match_all()

preg_match—执行匹配正则表达式 preg_match(string$pattern,string$subject[,array&$matches[,int$flags= 0[,int$offset= 0]]] ) :int 参数 是否必须 说明 pattern 是 要搜索的模式 subject 是...

清风的博客 4354

preg_match_all 结果处理全攻略(从基础到多维数组提取)

掌握preg_match_all结果数组处理技巧,轻松提取网页抓取、日志分析中的多维匹配数据。详解分组捕获、索引结构与循环遍历方法,提升正则提取效率,值得收藏。

ByteShoal的博客 1038

preg_match_all用法

(PHP 4, PHP 5, PHP 7, PHP 8) preg_match_all—执行一个全局正则表达式匹配 说明 preg_match_all( string$pattern, string$subject, array&$matches=null, int$flags= 0, int$offset= 0 ):int|false|null 搜索subject中所有匹配pattern给定正则表达式 的匹配结果并且将它们...

红目香薰 5481

揭秘preg_match_all返回值结构:5分钟彻底搞懂PHP正则匹配结果处理

快速掌握PHP正则匹配结果处理技巧,深入解析PHP preg_match_all 的结果结构,涵盖多维数组返回机制、捕获组应用及实际使用场景。清晰示例带你理清匹配数据提取逻辑,提升开发效率,值得收藏。

FastDebug的博客 717

为什么你的preg_match_all只返回第一组?90%的人都忽略的关键参数!

掌握PHP preg_match_all的关键技巧,避免结果缺失。详解$matches参数结构与PREG_SET_ORDER标志的使用场景,揭示为何常只获第一组数据。理解正则匹配机制,提升数据提取效率,值得收藏。

FuncInk的博客 723

preg_match_all结果数组混乱?一文理清键名、顺序与模式修饰符的关系

解决preg_match_all结果数组混乱问题,清晰解析键名生成规则、匹配顺序与模式修饰符影响。涵盖多组捕获、PREG_SET_ORDER等应用场景,助你精准提取数据结构,提升正则处理效率,值得收藏。

BreakNexus的博客 729

preg_match和preg_match_all的区别

<br />preg_match只匹配一次,preg_match_all是全文匹配<br />preg_match 字符串比对解析。<br />语法: int preg_match(string pattern, string subject, array [matches]);<br />返回值: 整数/数组<br />函数种类: 资料处理<br />内容说明: 本函数以 pattern 的规则来解析比对字符串 subject。比对结果返回的值放在数组参数 matches 之中,matches[0] 内容

xiao's Blog 2728

揭秘preg_match_all输出数组结构:90%开发者忽略的第三个参数陷阱

深入解析preg_match_all结果数组结构,揭示第三个参数的常见误区与正确用法。适用于正则匹配提取场景,帮助开发者精准获取匹配内容,避免数据错位。掌握这一细节,提升代码可靠性,值得收藏。

ByteChat的博客 877

【PHP正则表达式终极指南】:preg_match_all结果解析全攻略,提升数据提取效率90%

掌握PHP preg_match_all的结果处理技巧,高效提取网页、日志等文本中的关键数据。详解多维数组结构、匹配模式选择与性能优化方法,适用于内容抓取、表单验证等场景,显著提升正则提取效率,值得收藏。

FastCompile的博客 739

【正则匹配结果深度解析】:如何高效遍历preg_match_all多维数组?(附真实项目案例)

掌握PHP preg_match_all的结果处理技巧,高效遍历多维数组并提取关键信息。适用于日志分析、网页抓取等场景,结合真实项目案例讲解匹配与遍历优化方法,提升正则处理效率,值得收藏。

codeink的博客 664
上一篇: [delphi]生成随机字符(密码)函数
下一篇: 解决Win7下部分软件中文乱码
怪才
博客等级 码龄18年 30粉丝 13原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值