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

CTF实战进阶:五大经典漏洞攻防解析与自动化脚本设计 在网络安全领域,漏洞是攻击者突破防线、获取系统控制权的关键入口。其原理在于应用程序未能对用户输入进行充分验证或过滤,导致恶意代码得以执行。理解漏洞原理对于构建安全防御体系至关重要,其技术价值体现在从被动防御转向主动对抗,提升整体安全水位。典型的应用场景包括渗透测试、红蓝对抗以及CTF(Capture The Flag)竞赛。本文聚焦于CTF攻防实战,深入解析SQL注入、文件上传、文件包含、命令执行和反序列化这五大经典漏洞的实战利用与防御技巧,并探讨如何设计自动化攻击脚本以提升在AWD(攻防对抗)模式下的作战 阅读详情

第一章:preg_match_all函数结果结构全景解析

在PHP中,preg_match_all 函数用于全局正则匹配,其返回结果是一个多维数组,结构设计精巧,能同时提供完整匹配与子组捕获信息。理解其输出结构对高效处理文本数据至关重要。

基础返回结构

调用 preg_match_all 后,结果数组默认包含多个层级。主键对应捕获组,索引0表示完整匹配,后续数字对应括号内的子组。


$pattern = '/(\d{4})-(\d{2})-(\d{2})/';
$subject = '日期:2023-04-05 和 2023-05-10';
preg_match_all($pattern, $subject, $matches);

// 输出结构
print_r($matches);

上述代码执行后,$matches 将生成三层结构:

  • $matches[0]:所有完整匹配项(如 "2023-04-05")
  • $matches[1]:第一个子组捕获(年份)
  • $matches[2]:第二个子组捕获(月份)
  • $matches[3]:第三个子组捕获(日期)

可选参数对结构的影响

通过设置第四个参数,可改变输出格式。例如使用 PREG_SET_ORDER 按“每次匹配为一行”组织数据。

常量说明输出结构示例
PREG_PATTERN_ORDER默认模式,按捕获组组织$matches[1] 为全部年份
PREG_SET_ORDER按单次匹配组织$matches[0][1] 为第一次的年份

命名捕获组的结构变化

使用命名子组可提升可读性,并在结果中同时创建数字和字符串索引。


$pattern = '/(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})/';
preg_match_all($pattern, $subject, $matches);
// 可通过 $matches['year'] 直接访问年份

第二章:多维数组结构深度剖析与访问策略

2.1 理解preg_match_all返回的二维数组结构

在PHP中,preg_match_all函数用于全局正则匹配,其结果以二维数组形式返回,结构设计极具逻辑性。

二维数组的构成
  • 外层数组索引代表第几次匹配成功
  • 内层数组包含所有捕获组的内容,索引0表示完整匹配项
代码示例与结构解析
$pattern = '/(\d{4})-(\d{2})-(\d{2})/';
$subject = '日期:2023-05-20 和 2024-06-15';
preg_match_all($pattern, $subject, $matches);

print_r($matches);

上述代码中,$matches[0] 存储每次完整匹配的日期字符串,$matches[1]、$matches[2]、$matches[3] 分别对应年、月、日的捕获组。这种按“组”组织的数据结构便于批量提取和处理多段文本中的结构化信息。

2.2 捕获组与匹配结果的对应关系详解

在正则表达式中,捕获组通过圆括号 () 定义,用于提取匹配文本中的特定部分。每个捕获组按左括号出现顺序从 1 开始编号,整个匹配结果为第 0 组。
捕获组编号规则
  • 编号 0 表示完整匹配结果
  • 编号 1 及以上对应各捕获组,按左括号顺序分配
  • 嵌套捕获组按外层左括号优先排序
实例解析
(\d{4})-(\d{2})-(\d{2})
匹配字符串 2025-03-15 时:
组编号内容
02025-03-15
12025
203
315
捕获组为后续数据提取和替换操作提供结构化支持。

2.3 使用索引键区分完整匹配与子组捕获

在正则表达式中,使用括号定义捕获组时,返回结果通常包含多个元素:索引为0的元素表示完整匹配,而后续索引对应各个子组的捕获内容。
捕获组结构解析
  • 索引0:完整匹配的字符串
  • 索引1+:依次为每个括号内子组的匹配内容
代码示例
const text = "John: 123-456-7890";
const regex = /(\w+): (\d{3})-\d{3}-\d{4}/;
const match = text.match(regex);

console.log(match[0]); // 输出: John: 123-456-7890(完整匹配)
console.log(match[1]); // 输出: John(第一个子组)
console.log(match[2]); // 输出: 123(第二个子组)
上述代码中,正则表达式通过两个捕获组分别提取姓名和区号。match数组的索引清晰区分了整体与局部匹配结果,便于后续数据提取与处理。

2.4 PREG_SET_ORDER与PREG_PATTERN_ORDER模式对比

在PHP的preg_match_all函数中,PREG_SET_ORDER和PREG_PATTERN_ORDER是两种不同的结果排序模式,直接影响匹配数据的组织结构。
输出结构差异
  • PREG_PATTERN_ORDER:按匹配模式分组,所有完整匹配项在前,后续为各子组捕获内容。
  • PREG_SET_ORDER:按匹配集分组,每次完整匹配及其子组作为一个独立集合。
代码示例与分析
$pattern = '/(\d+)-(\w+)/';
$subject = '100-abc 200-def';

// 使用 PREG_SET_ORDER
preg_match_all($pattern, $subject, $set_result, PREG_SET_ORDER);
/*
$set_result 结构:
[
  [0 => '100-abc', 1 => '100', 2 => 'abc'],
  [0 => '200-def', 1 => '200', 2 => 'def']
]
*/

// 使用 PREG_PATTERN_ORDER
preg_match_all($pattern, $subject, $pattern_result, PREG_PATTERN_ORDER);
/*
$pattern_result 结构:
[
  0 => ['100-abc', '200-def'],        // 所有完整匹配
  1 => ['100', '200'],                // 第一个子组
  2 => ['abc', 'def']                 // 第二个子组
]
*/
当处理多个捕获组且需逐次访问完整匹配时,PREG_SET_ORDER更直观;而需批量提取特定子组时,PREG_PATTERN_ORDER更高效。

2.5 遍历效率:引用传递与值传递的性能考量

在遍历大型数据结构时,函数参数的传递方式对性能有显著影响。值传递会复制整个对象,带来额外的内存开销和时间成本,而引用传递仅传递地址,避免了复制。
值传递的性能瓶颈
当结构体较大时,值传递会导致栈空间占用高且复制耗时:

type LargeStruct struct {
    Data [1000]int
}

func processByValue(s LargeStruct) { // 复制整个结构体
    // 处理逻辑
}
每次调用 processByValue 都会复制 1000 个整数,时间与空间开销大。
引用传递优化遍历
使用指针传递可显著提升效率:

func processByRef(s *LargeStruct) { // 仅传递指针
    // 直接操作原数据
}
无论结构体多大,指针大小固定(通常 8 字节),避免了复制开销,特别适合循环遍历场景。
  • 值传递适用于小型内置类型(如 int、bool)
  • 引用传递更适合大结构体、切片、map 等复合类型

第三章:高效遍历技术与常见陷阱规避

3.1 foreach循环结合list()提升可读性与性能

在PHP开发中,foreach循环结合list()语法能显著提升多维数组遍历的可读性与执行效率。
语法结构与应用场景
该组合常用于处理键值对或二维数组,如数据库结果集。通过list()直接解构数组元素,避免冗余赋值操作。

$users = [
    ['Alice', 28, 'Engineer'],
    ['Bob', 35, 'Designer']
];

foreach ($users as list($name, $age, $job)) {
    echo "$name is $age years old, works as $job.\n";
}
上述代码中,list()将每行数组按顺序映射到变量,逻辑清晰且减少中间索引访问开销。
性能优势分析
  • 减少数组下标访问次数,降低CPU指令周期
  • 提升代码语义化程度,便于维护
  • 在大容量数据迭代中,执行效率优于传统for循环

3.2 for循环在固定结构中的精准控制优势

精确遍历已知结构

在处理数组、切片或预定义范围时,for循环提供最直接的索引与值访问方式,确保每个元素被按序处理。

for i := 0; i < len(data); i++ {
    fmt.Println("Index:", i, "Value:", data[i])
}

该结构明确控制起始、条件和递增步骤,适用于需要索引参与计算的场景。变量i作为计数器,可精准定位元素位置。

性能与可读性兼顾
  • 编译器可对固定边界进行优化,减少运行时开销
  • 逻辑清晰,便于调试和维护
  • 避免动态结构带来的不确定性

3.3 避免重复遍历:缓存长度与预提取关键数据

在高频数据处理场景中,重复遍历数组或对象会显著影响性能。通过缓存集合长度和预提取关键字段,可有效减少冗余计算。
缓存数组长度
循环中频繁访问 array.length 会触发多次属性读取。建议在循环外缓存该值:

for (let i = 0, len = items.length; i < len; i++) {
  process(items[i]);
}
len 缓存了数组长度,避免每次迭代重新计算,尤其在大数组场景下提升明显。
预提取关键数据
当需多次访问对象的深层属性时,应提前提取至局部变量:
  • 减少属性查找次数
  • 降低作用域链搜索开销
  • 提升 JIT 编译优化效率
结合使用上述策略,可在不改变逻辑的前提下显著提升执行效率。

第四章:真实项目中的正则提取实战案例

4.1 从HTML日志中提取用户行为数据(含嵌套标签处理)

在现代前端监控系统中,HTML日志常包含用户交互的原始痕迹,如点击、输入和页面停留等行为。这些日志通常以DOM快照形式记录,可能包含多层嵌套标签,需精准解析以还原真实行为路径。
解析策略设计
采用递归遍历方式处理嵌套结构,优先提取具有行为语义的标签(如 button、input),并通过 data-* 属性识别自定义行为标识。

function extractUserActions(node) {
  const actions = [];
  if (node.nodeType === 1) { // 元素节点
    const tagName = node.tagName.toLowerCase();
    const behavior = node.getAttribute('data-behavior');
    if (['click', 'input'].includes(behavior)) {
      actions.push({
        type: behavior,
        element: tagName,
        value: node.textContent.trim(),
        timestamp: node.getAttribute('data-timestamp')
      });
    }
    // 递归处理子节点
    for (let child of node.childNodes) {
      actions.push(...extractUserActions(child));
    }
  }
  return actions;
}
上述函数通过深度优先遍历 DOM 节点,识别携带 data-behavior 属性的关键元素,并收集其上下文信息。递归机制确保即使在复杂嵌套结构中(如按钮位于多层 div 内),也能完整捕获用户操作。
  • 支持动态属性标记,提升匹配灵活性
  • 兼容文本内容提取,适用于表单输入场景
  • 时间戳回溯能力保障行为序列准确性

4.2 批量解析API响应中的JSON片段(混合文本场景)

在处理第三方API返回的混合文本时,常出现非标准JSON嵌入日志或HTML的情况。需从杂乱内容中精准提取多个JSON片段并批量解析。
识别与提取JSON片段
利用正则表达式匹配典型的JSON对象或数组结构,尤其是被包裹在日志信息中的部分。

re := regexp.MustCompile(`(\{(?:[^{}]|\{[^{}]*\})*\})`)
matches := re.FindAllStringSubmatch(response, -1)
var jsonObjects []map[string]interface{}

for _, match := range matches {
    var data map[string]interface{}
    if err := json.Unmarshal([]byte(match[1]), &data); err == nil {
        jsonObjects = append(jsonObjects, data)
    }
}
上述代码通过贪婪匹配查找所有外层JSON对象,使用json.Unmarshal逐一解析。正则模式确保跳过嵌套异常结构,仅捕获完整对象。
错误容忍与批量处理
  • 逐个解析并记录失败项,避免单个错误中断整体流程
  • 使用并发goroutine提升大批量响应的处理效率
  • 对解析结果统一结构化输出,便于后续集成

4.3 提取SQL语句中的字段与条件实现审计分析

在数据库审计中,精准提取SQL语句中的字段名和查询条件是实现行为监控的关键步骤。通过解析SQL语法树,可结构化分离出操作类型、涉及字段及过滤条件。
SQL解析流程
  • 使用SQL解析器(如Java的JSqlParser)将原始语句转换为抽象语法树(AST)
  • 遍历AST节点,识别SELECT字段、WHERE表达式和JOIN关联条件
  • 提取敏感字段访问行为,用于后续风险策略匹配
代码示例:字段与条件提取

// 使用JSqlParser解析SQL
Statement stmt = CCJSqlParserUtil.parse("SELECT name, email FROM users WHERE age > 18");
if (stmt instanceof Select) {
    Select select = (Select) stmt;
    PlainSelect plain = (PlainSelect) select.getSelectBody();
    
    // 提取字段
    List<String> columns = plain.getSelectItems().stream()
        .map(item -> item.toString()).collect(Collectors.toList());
    
    // 提取WHERE条件
    Expression where = plain.getWhere();
    System.out.println("访问字段: " + columns);
    System.out.println("过滤条件: " + where);
}
上述代码通过JSqlParser解析SQL,分离出投影字段与过滤表达式。字段列表可用于检测是否包含身份证、手机号等敏感信息,WHERE条件则用于分析是否存在异常查询模式,如全表扫描或高频条件组合,从而支撑细粒度审计策略。

4.4 多语言内容中标记与变量的智能分离方案

在多语言系统中,标记文本与动态变量混杂会导致翻译困难和结构错乱。为实现高效分离,推荐采用占位符替换策略,将可变内容从语句中抽离。
分离逻辑实现
  • 识别原始文本中的动态字段,如用户名称、时间戳等
  • 使用标准化占位符(如 {0}, {name})替代变量
  • 维护独立的变量映射表,供运行时注入

const template = "Hello {name}, you have {count} new messages.";
const variables = { name: "Alice", count: 5 };
const localized = template.replace(/{(\w+)}/g, (match, key) => variables[key]);
// 输出:Hello Alice, you have 5 new messages.
上述代码通过正则匹配大括号内的变量名,在运行时从数据对象中提取值并替换。该方式使翻译文本无需接触逻辑代码,提升国际化维护效率。

第五章:性能优化建议与未来扩展方向

数据库查询优化策略
频繁的慢查询会显著影响系统响应时间。使用索引覆盖和复合索引可大幅提升查询效率。例如,在用户中心服务中,对 user_id 和 created_at 建立联合索引:
CREATE INDEX idx_user_created ON orders (user_id, created_at DESC);
同时启用 PostgreSQL 的 auto_explain 模块监控执行计划,及时发现全表扫描。
缓存层级设计
采用多级缓存架构降低数据库压力:
  • 本地缓存(如 Caffeine)用于高频只读数据,TTL 设置为 5 分钟
  • Redis 集群作为分布式缓存,支持 LRU 驱逐和热点 key 分片
  • CDN 缓存静态资源,命中率提升至 87%
某电商平台在商品详情页引入多级缓存后,QPS 从 1.2k 提升至 4.6k。
异步化与消息队列解耦
将非核心流程(如日志记录、通知发送)迁移至消息队列处理。使用 Kafka 实现削峰填谷:
指标同步处理异步处理
平均响应时间340ms98ms
系统吞吐量850 RPS2100 RPS
微服务横向扩展方案
基于 Kubernetes 的 HPA(Horizontal Pod Autoscaler)实现自动扩缩容。通过 Prometheus 采集 CPU 和请求延迟指标,配置扩缩容阈值:
metrics:
  - type: Resource
    resource:
      name: cpu
      target:
        type: Utilization
        averageUtilization: 70
在大促期间,订单服务实例数从 6 自动扩展至 24,保障了系统稳定性。
【信息科学与工程学】【数据中心】 第十九篇 MFU的优化提升方法03 等级模块类型子模块子子模块功能描述MFU影响因子优化优先级L0​算术逻辑单元(ALU)标量ALU整数ALU标量整数运算α_int = 0.1-0.3中浮点ALU标量浮点运算α_fp_scalar = 0.2-0.4中向量处理单元(VPU)SIMD单元128-bit SIMD短向量运算β_SIMD128 = 0.3-0.6高256-bit SIMD中向量运算β_SIMD256 = 0.4-0.7高512-bit SIMD长向量运算β_SIMD512 = 0.5-0.8极高矩阵处理单元(MPU)Tensor C 阅读详情

相关推荐

Voxel Hashing技术解析:如何解决TSDF内存爆炸问题?

本文深入解析Voxel Hashing技术如何有效解决TSDF内存爆炸问题。通过动态内存分配和空间哈希函数设计,该技术将内存占用降低96.6%,同时保持高精度重建。文章详细介绍了GPU加速实现、现代系统演进及实践指南,为实时3D重建提供工程解决方案。

m2n3b4v5c6的博客 713

正则表达式断言匹配数组里的所有数值

正则:(\d+)(?=([,\d])*\]\s*) 匹配类型:[1,2,3,4] 匹配结果:1 2 3 4  或者去掉sup标签 正则表达式匹配   Pattern p=Pattern.compile("正则"); Matcher m2=p.matcher(要匹配内容); while(m2.find()){ m2.group(0)//获取正则表达式获取到的整个字符     m2.

qq_35464063的博客 5165

51单片机IAP在线升级

51单片机IAP在线升级 爱矽半导体E85F3325单片机IAP在线升级教程,此处可查看更新及demo下载 文章目录前言一、ROM资源二、KEIL有关知识1.BL51连接器:2.LX51连接器:三、Keil其他相关项说明:四、MCU启动文件说明:五、例程BOOTLOADER使用说明六、例程使用可更改说明:七、程序使用通信方式:XMODEM八、APP程序说明九、APP代码升级说明十、代码合并烧写 前言 扩展-IAP 主要用于产品出厂后应用程序的更新作用 ,类似于其他引导装载升级程序的方法,在系统中必须始终

qq_42415953的博客 6667

Docker 入门与实战:从环境搭建到项目部署

C#支持多种循环类型:`for`、`while`、`do-while`和`foreach`。C# 提供了多种循环类型:`for`、`while`、`do-while` 和 `foreach`。解释:变量$count$初始为1,每次循环累加到$sum$,直到$count > 10$。解释:这里$i$从1开始,每次加1,直到$i > 5$时停止。循环变量$i$的控制是`for`循环的核心优势。用 `while` 或 `do-while` 当条件未知(`do-while` 确保至少执行一次)。

2502_93946653的博客 234

【硬件相关】IB网与以太网核心技术解析及高性能网络部署指南

本文深入解析了IB网与以太网的核心技术差异,包括协议栈、流量控制机制及硬件架构,并提供了高性能网络部署的实战指南。通过对比测试和调优案例,展示了IB网在低延迟和高负载下的优势,以及混合组网中的创新应用,助力超算集群和高效网络部署。

weixin_29311017的博客 99

第 8 篇:TMC2240 电机正反转实现|DIR 引脚控制 + 代码优化(稳定不抖动)

本文详细介绍了TMC2240电机驱动芯片的正反转实现方法,重点解决方向切换时的抖动和冲击问题。文章首先明确了硬件连接、基础配置和使能状态三个前提条件,然后阐述了DIR引脚电平控制方向的核心原理,提供了STM32的GPIO配置代码。针对方向切换时的电流冲击问题,作者提出了"停止-延迟-切换-启动"的平滑切换逻辑,并给出了包含方向枚举、转速控制和方向切换函数的完整代码实现方案。通过这种优化方法,可以有效避免电机在正反转切换时产生的抖动、冲击声和发热问题,实现稳定的双向控制。文章还提示了后续可

BackCatK Chen的博客 2074

数组对象和正则数组对象和正则

数组对象和正则

hu_xingwei的博客 546

基于STM32设计的智能门锁(微信小程序+手机APP等多种方式开锁)(188)

当前智能门锁项目是基于STM32微控制器、ESP8266-WIFI模块、OLED显示屏、指纹模块、蓝牙模块、门禁刷卡模块、烟雾检测模块、火光检测模块、温湿度检测模块等硬件设备开发的一种智能门锁系统

1万+

java 正则 数组_创建正则表达式匹配数组

问题在Java中,我试图将所有正则表达式匹配返回到数组,但似乎只能检查模式是否匹配(boolean)。有人可以帮我使用正则表达式匹配来形成一个匹配给定字符串中的正则表达式的所有字符串的数组吗?谢谢!#1 热门回答(212 赞)(4castle's answer如果可以假设Java> = 9,则优于以下内容)你需要创建一个匹配器并使用它来迭代查找匹配项。import java.util.reg...

weixin_36317943的博客 969

人工智能在文学领域的应用:创作无限可能的智能作家

人工智能在文学领域的应用:创作无限可能的智能作家 作者:禅与计算机程序设计艺术 1. 背景介绍 人工智能技术近年来飞速发展,在各个领域都有广泛应用。文学创作作为人类最高级的智力活动之一,也逐渐受到人工智能技术的影响和改变。随着自然语言处理、生成式模型等人工智能

AI天才研究院 1110

YOLOv11改进策略【损失函数篇】| 替换激活函数为Mish、PReLU、Hardswish、LeakyReLU、ReLU6

在卷积神经网络中,激活函数通过在神经网络中引入非线性,使网络能够学习和逼近复杂函数,从而处理复杂的模式识别与分类问题。

Limiiiing的博客 2786

JS——数组及正则表达式

数组介绍 数组概念 JavaScript数组是指将多个数据对象编码存储、提供一致的存取方式的集合。 js数组也是存储一系列值的集合 与java数组不同的是,js的数组中,元素的数据类型可以不相同。数组长度不固定,添加元素接口改变其长度。 创建数组 Array构造方法 var arr = new Array();//空数组 var arr = new Array(size);/...

Hydra的博客 3547

私家侦探如何追踪难以找到的人,掌握几个很少人知道的在线免费查询网站,搜索人名、电话号码以及地址的开源网站

私家侦探如何追踪难以找到的人,掌握几个很少人知道的在线免费查询网站,搜索人名、电话号码以及地址的开源网站。

代码讲故事 6484

【preg_match_all 结果数组深度解析】:掌握PHP正则匹配的终极技巧

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

ByteVein的博客 388

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

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

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

ByteChat的博客 877

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

SQL注入攻击核心技术深度解析:原理、攻防与实战案例

SQL注入是一种常见的Web安全漏洞,其核心原理在于应用程序未能正确处理用户输入,导致攻击者能够将恶意SQL代码注入到数据库查询中。这种漏洞源于程序与数据边界混淆,违背了数据与代码分离的安全原则。从技术价值看,理解SQL注入不仅有助于防御数据泄露、服务瘫痪等风险,更是构建安全应用架构的基础。在应用场景上,它广泛存在于任何与数据库交互的环节,如登录、搜索、订单查询等。本文以sqlmap等自动化工具为例,剖析了联合查询、报错注入、布尔盲注等主流攻击技术,并深入探讨了参数化查询、输入验证等核心防御策略,通过实战案

weixin_33884611的博客 323

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

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

php 正则出现多次,PHP的preg_match_all正则字符多次出现第一次出代码

PHP的preg_match_all正则字符多次出现第一次出代码$str[1]="i我是一只小小qq:42343243 444234324";$str[2]="我是一只小小qq联系人42343244234 fasdfdsfas";$str[3]="我是一只小小qq42343244234 fasdfdsfas";$preg="#(d*)(d{5,14})#";for($i=1;...

weixin_28687331的博客 543

比较常用的几个正则表达式(匹配数字)

&lt;div class="blog-content-box"&gt; &lt;div class="article-title-box"&gt; &lt;span class="article-type type-1 float-left"&gt;原&lt;/span&gt; &lt;h6 class="title-article"&g

而我想……成为一个有趣的妞 13万+

正则表达式之PHP篇match,match_all

preg_match($pattern,$subject,[array&match]) preg_match_all($pattern,$subject,array&matches) preg match 只匹配一次,返回值0或1; preg match all 匹配多次,有多少次匹配到多少次返回匹配到的次数; $pattern 正则表达式; $subject 所要匹配的字符串或数组; /

xiaoshuode的博客 2370

初步使用python正则表达式匹配数组

初步使用python的正则表达式用于匹配数字 操作系统: Linux python版本: Python 3.5.2 参考文献: 正则表达式之数字验证 简单使用正则库re在命令行验证匹配数字 >>> import re >>> origin="12 13 14" >>> print(origin) 12 13 14 >&...

JohnnyRian的博客 6937

使用正则表达式生成匹配数组

private List<Double> reg(string instr, string dw) { //生成list List<Double> list = new List<Double>(); Regex regex = new Regex...

diaoliao2751的博客 1140

php正则匹配多个,php – 将多个匹配正则表达式合并为一个并获得匹配的表达式...

怎么样:preg_match("@(?=(?P^(faq|aide|todo|paris)$))(?=(?P(paris)$))@im", "paris", $groups);print_r($groups);输出:Array([0] =>[group1] => paris[1] => paris[2] => paris[group2] => paris[3] =&g...

weixin_39551188的博客 611

正则表达式:如何查找数组

在linux c的编程中,经常需要对变量重命名或者替换,如果数量太多,就需要用到正则表达式来批量处理。 数组的一般形式如下: 数组变量名('name') + 左中括号('[') +  若干空格(' ') + 下标('index') + 若干空格(' ') +右中括号(']') 对应的正则表达式如下: name\[\s*index\s*\]  其中\s*表示大于等于零个空格。 转载自 ht

gongg08的专栏 2771
上一篇: Laravel 10队列延迟执行实战技巧(99%开发者忽略的性能优化点)
下一篇: str_replace的$count参数到底能做什么?,一个被严重低估的功能
MessyInk
博客等级 码龄11年 136粉丝 1992原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值