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

第一章:preg_match_all函数核心机制解析

在PHP的正则表达式处理中,preg_match_all 是一个至关重要的函数,用于全局搜索字符串中所有与正则模式匹配的结果,并将结果存储到多维数组中。其核心机制基于PCRE(Perl Compatible Regular Expressions)引擎,支持复杂的模式匹配和捕获分组。

函数基本语法与参数说明

preg_match_all 的标准调用格式如下:


// 语法结构
int preg_match_all(
    string $pattern,          // 正则表达式模式
    string $subject,         // 要搜索的输入字符串
    array &$matches = null,  // 存储匹配结果的数组(引用传递)
    int $flags = 0,          // 匹配标志位,如 PREG_SET_ORDER
    int $offset = 0          // 开始搜索的偏移位置
);

该函数返回成功匹配的次数,$matches 数组的结构取决于是否使用了捕获组以及指定的标志位。

匹配结果的组织方式

当存在捕获组时,$matches 数组会包含多个子数组。默认情况下,其结构为:

  • $matches[0]:所有完整匹配项的数组
  • $matches[1]:第一个捕获组的所有匹配值
  • $matches[2]:第二个捕获组的所有匹配值,依此类推

示例:提取HTML标签中的内容

以下代码演示如何使用 preg_match_all 提取所有 <a> 标签的链接和文本:


$subject = '<a href="https://example.com">示例网站</a><a href="https://test.org">测试站点</a>';
$pattern = '/<a\s+href="([^"]+)">(.*?)<\/a>/i';

preg_match_all($pattern, $subject, $matches);

// 输出结果
foreach ($matches[1] as $index => $url) {
    echo "链接: $url, 文本: {$matches[2][$index]}\n";
}

常用标志位对比

标志常量作用说明
PREG_PATTERN_ORDER默认模式,按模式分组排列结果
PREG_SET_ORDER按每次匹配的集合排序,每个匹配作为一个子数组
PREG_OFFSET_CAPTURE返回匹配的偏移位置(字节索引)

第二章:匹配结果的数据结构深度剖析

2.1 结果数组的默认索引模式与逻辑

在多数编程语言中,结果数组默认采用从0开始的连续整数索引模式。这种设计源于内存地址计算的高效性,使得元素访问可通过基址加偏移量快速定位。
索引模式的技术实现
以Go语言为例,切片底层为连续内存块,索引直接对应偏移位置:
arr := []int{10, 20, 30}
fmt.Println(arr[0]) // 输出 10
上述代码中,arr[0] 访问首元素,其逻辑基于指针运算:地址 = 起始地址 + (索引 × 元素大小)。
常见索引行为对比
语言起始索引是否可变
Python0否
JavaScript0否
Fortran1是
该模式提升了缓存命中率与遍历效率,成为现代数组结构的事实标准。

2.2 分组捕获与子模式匹配的层级关系

在正则表达式中,分组捕获通过括号 () 构建子模式,形成匹配的层级结构。每一层括号定义一个捕获组,按左括号出现顺序编号。
捕获组的嵌套机制
当子模式嵌套时,层级关系由括号的嵌套深度决定。外层组包含内层组,匹配结果可逐级提取。

(\d{4})-(\d{2}-(\d{2}))
上述模式中,第一组捕获年份,第二组捕获“月-日”,第三组单独捕获日期。匹配 2023-09-15 时:
  • Group 1: 2023
  • Group 2: 09-15
  • Group 3: 15
非捕获组优化
使用 (?:) 可避免不必要的捕获,提升性能并简化结果结构。

2.3 全局匹配下多轮结果的堆叠方式

在全局匹配场景中,正则引擎会持续扫描输入文本并捕获所有符合条件的结果。为保留每一轮匹配的完整信息,通常采用数组堆叠的方式存储结果。
堆叠结构设计
  • 每次匹配生成一个结果对象,包含匹配值、索引和捕获组
  • 所有结果按匹配顺序推入结果数组
  • 支持后续遍历、去重或合并操作

const regex = /(\d+)/g;
const str = "a1b22c333";
const matches = [];
let match;

while ((match = regex.exec(str)) !== null) {
  matches.push({
    value: match[1],
    index: match.index
  });
}
// 输出: [{value:"1",index:1}, {value:"22",index:3}, {value:"333",index:6}]
上述代码中,regex.exec() 在全局模式下逐次执行,每次推进内部 lastIndex 指针。循环将持续直到无更多匹配项,确保所有结果被堆叠至 matches 数组中,实现安全、有序的多轮结果收集。

2.4 使用PREG_PATTERN_ORDER组织输出

在PHP中处理正则表达式匹配时,`preg_match_all` 提供了多种排序方式来组织返回结果。`PREG_PATTERN_ORDER` 是其中一种关键选项,用于按匹配模式的结构组织多维数组输出。
输出结构解析
当使用 `PREG_PATTERN_ORDER` 时,返回数组的第一个维度对应每个捕获组,第二个维度为每次匹配的结果。

$subject = "John: 123, Jane: 456";
$pattern = '/(\w+): (\d+)/';
preg_match_all($pattern, $subject, $matches, PREG_PATTERN_ORDER);

// $matches[0] 包含完整匹配
// $matches[1] 包含第一个捕获组(姓名)
// $matches[2] 包含第二个捕获组(数字)
上述代码中,`$matches[1]` 将包含 `['John', 'Jane']`,而 `$matches[2]` 为 `['123', '456']`,便于按逻辑分组提取数据。
适用场景对比
  • 适用于需按捕获组分类处理的批量文本解析
  • 相比 PREG_SET_ORDER,更利于字段化数据提取

2.5 使用PREG_SET_ORDER优化遍历效率

在处理多组正则匹配结果时,PHP的preg_match_all默认以PREG_PATTERN_ORDER组织输出,将所有匹配的第一子组集中返回,再返回第二子组,依此类推。这在逐行处理数据时不够直观且效率较低。
使用PREG_SET_ORDER提升可读性与性能
通过指定PREG_SET_ORDER标志,结果按“每次匹配为一个独立数组项”组织,更便于逐条处理。

$pattern = '/(\d+)-(\w+)/';
$subject = '100-abc,200-def,300-xyz';
preg_match_all($pattern, $subject, $matches, PREG_SET_ORDER);

foreach ($matches as $match) {
    echo "ID: {$match[1]}, Name: {$match[2]}\n";
}
上述代码中,$matches的每一项对应一次完整匹配,$match[1]和$match[2]分别为捕获组内容。相比默认顺序,避免了跨数组访问,减少索引计算开销,尤其在大数据集遍历时显著提升效率。

第三章:关键参数对结果形态的影响

3.1 标志位PREG_OFFSET_CAPTURE的实际应用

在正则匹配中,PREG_OFFSET_CAPTURE标志位用于返回匹配子串在原字符串中的字节偏移量,而不仅仅是匹配内容。这一特性在文本解析、语法高亮和错误定位等场景中尤为关键。
基础用法示例

$subject = "联系电话:138-1234-5678,邮箱:admin@example.com";
$pattern = '/\d{3}-\d{4}-\d{4}/';
preg_match($pattern, $subject, $matches, PREG_OFFSET_CAPTURE);

// 输出:Array ( [0] => Array ( [0] => 138-1234-5678 [1] => 5 ) )
print_r($matches);
上述代码中,$matches[0][1] 的值为 5,表示电话号码从第5个字节开始,便于后续定位原始文本位置。
实际应用场景
  • 日志分析系统中精确定位异常信息起始位置
  • 代码编辑器实现语法错误的行/列提示
  • 敏感词过滤时标记需替换的字符区间

3.2 匹配限制参数$flags的作用边界

在正则表达式处理中,$flags 参数用于控制匹配行为的边界条件和模式修饰。该参数虽小,但对匹配结果具有决定性影响。
常见标志及其语义
  • i:忽略大小写匹配
  • m:多行模式,^ 和 $ 匹配每行首尾
  • s:单行模式,使 . 匹配包括换行符在内的所有字符
作用边界示例

const pattern = /^error/i;
const text = "Error: system failure\nerror: disk full";
text.match(pattern); // 仅匹配第一行的 "Error"
上述代码中,尽管使用了 i 标志实现忽略大小写,但由于未启用多行模式(m),^ 仅在字符串开头生效,无法匹配第二行的 "error"。
标志组合的影响范围
标志组合匹配范围
g全局匹配
gm跨行全局匹配
gs跨越换行符的全局匹配

3.3 起始位置偏移量$offset的精准控制

在数据流处理中,起始位置偏移量 `$offset` 决定了消费者从消息队列的何处开始读取数据。精确控制该值可避免数据重复消费或丢失。
偏移量设置模式
  • latest:从最新位置开始,忽略历史消息
  • earliest:从分区最早消息开始
  • 指定数值:手动设定 `$offset = 12345`,实现精准定位
代码示例:Kafka消费者设置起始偏移

Properties props = new Properties();
props.put("bootstrap.servers", "localhost:9092");
props.put("group.id", "test-group");
props.put("auto.offset.reset", "none"); // 禁用自动重置

// 手动分配分区并指定偏移
KafkaConsumer<String, String> consumer = new KafkaConsumer<>(props);
consumer.assign(Arrays.asList(new TopicPartition("logs", 0)));
consumer.seek(new TopicPartition("logs", 0), 1024); // 精确设置offset=1024
上述代码通过 seek() 方法将消费者起始位置强制定位到偏移量 1024,适用于故障恢复或数据重放场景。参数 TopicPartition 指定目标分区,seek() 不依赖消费者组协调,提供更细粒度的控制能力。

第四章:高效提取与处理实战技巧

4.1 多维度数据提取中的正则设计策略

在处理日志、网页或结构化文本时,正则表达式是多维度数据提取的核心工具。合理的设计策略能显著提升匹配精度与解析效率。
分组捕获与命名机制
利用命名捕获组可增强正则的可读性与维护性。例如从访问日志中提取IP、时间与请求路径:
(?<ip>\d{1,3}(\.\d{1,3}){3}) - - \[(?<time>[^\]]+)\] "(?<method>\w+) (?<path>[^\s]+)"
该模式通过(?<name>...)定义命名组,便于后续按语义提取字段,避免位置索引混淆。
性能优化策略
  • 避免贪婪匹配,使用?转为懒惰模式
  • 减少嵌套量词,防止回溯失控
  • 预编译正则对象以复用(如Python中re.compile)
结合上下文边界锚定(如^、$)与原子组,可有效降低误匹配率。

4.2 结合array_column快速筛选目标字段

在处理多维数组时,常需提取特定字段形成新数组。PHP 的 array_column 函数为此类操作提供了高效解决方案。
基本用法
$users = [
    ['id' => 1, 'name' => 'Alice', 'email' => 'alice@example.com'],
    ['id' => 2, 'name' => 'Bob',   'email' => 'bob@example.com']
];

$names = array_column($users, 'name');
// 输出: ['Alice', 'Bob']
该函数从每个子数组中提取指定键的值,生成索引数组。第一个参数为源数组,第二个参数为目标字段名。
高级应用:带索引键的映射
可指定第三参数作为新数组的键:
$namesById = array_column($users, 'name', 'id');
// 输出: [1 => 'Alice', 2 => 'Bob']
此模式适用于构建 ID 到名称的映射表,提升数据关联查询效率。

4.3 利用命名捕获组提升代码可维护性

在处理复杂字符串解析时,正则表达式的命名捕获组能显著增强代码的可读性和可维护性。相比传统的数字索引捕获,命名捕获通过语义化标签使逻辑更清晰。
语法与基本用法
命名捕获组使用 (?<name>pattern) 语法定义。例如,从日志行中提取时间、IP 和请求路径:

const logLine = '192.168.1.1 - [2023-08-01T12:30:45] "GET /api/user"';
const regex = /(?<ip>\d+\.\d+\.\d+\.\d+) - \[(?<timestamp>[^\]]+)\] "(\w+) (?<path>[^"]+)"/;
const match = logLine.match(regex);
console.log(match.groups.ip);      // 输出: 192.168.1.1
console.log(match.groups.path);    // 输出: /api/user
该正则将关键字段赋予具名标签,后续维护者无需记忆捕获组顺序即可准确访问数据。
优势对比
  • 提高可读性:字段名称代替 magic number 索引
  • 降低耦合:调整捕获顺序不影响变量引用
  • 便于调试:groups 对象结构清晰,易于日志输出

4.4 避免冗余匹配提升执行性能

在正则表达式处理中,冗余匹配会显著增加回溯次数,导致性能下降。通过优化模式设计,可有效减少不必要的尝试。
避免贪婪量词滥用
贪婪匹配在多数场景下会尽可能扩展匹配范围,引发多余回溯。使用懒惰量词或精确限定可改善效率。
# 低效写法:过度回溯
.*(\d{4})\.txt$

# 优化后:减少不确定性
[^\/]*?(\d{4})\.txt$
上述改进通过限制 .* 的范围为非路径分隔符字符,并改用非贪婪匹配,降低无效尝试。
使用原子组与占有优先量词
原子组(atomic group)和占有优先量词能防止回溯进入已匹配部分,适用于确定性匹配场景。
  • 原子组:(?>...),一旦匹配不回退
  • 占有优先:a++,独占已匹配文本
这些机制在处理复杂嵌套结构时,能显著减少引擎状态数,提升执行速度。

第五章:从原理到实践的全面总结

性能调优的实际策略
在高并发系统中,数据库连接池配置直接影响响应延迟。以 Go 语言为例,合理设置最大空闲连接数与生命周期可显著降低超时概率:
// 设置PostgreSQL连接池参数
db.SetMaxOpenConns(50)
db.SetMaxIdleConns(10)
db.SetConnMaxLifetime(30 * time.Minute)
微服务间通信的最佳实践
使用 gRPC 替代 RESTful API 可提升序列化效率。以下为常见通信方式对比:
协议传输格式延迟(ms)适用场景
REST/JSON文本80前端集成
gRPC/Protobuf二进制25内部服务通信
部署架构中的容灾设计
通过多可用区部署配合 Kubernetes 的 Pod Disruption Budget,确保节点维护期间服务不中断。关键步骤包括:
  • 将工作节点分布于至少两个可用区
  • 配置反亲和性规则避免Pod集中调度
  • 启用 Horizontal Pod Autoscaler 基于CPU指标自动扩缩容

用户 → 负载均衡器 → [API网关] → [服务A | 服务B]

每个服务背后为跨AZ的副本集,后端连接分布式数据库集群

保姆级教程:用Protege 5.5.0从零构建你的第一个知识图谱(附实战案例文件) 本文提供了一份详细的Protege 5.5.0使用指南,从零开始构建知识图谱。涵盖环境配置、本体结构设计、实例填充到可视化展示的全流程,特别适合初学者快速掌握知识建模技术。通过实战案例演示,帮助读者理解如何定义类、属性及建立实例关系,是学习知识图谱构建的实用教程。 阅读详情

相关推荐

WSL基础环境配置方案

通过以上步骤,您已经在 Windows 的 WSL 环境中成功搭建了一个完整的基础开发环境,包含 Docker、Kubernetes、Helm、kubectl、yq、Git 等工具。这套环境特别适用于在国内使用阿里云镜像服务部署和管理 Tekton,提升了开发和运维的效率和稳定性。

落魄书生的职业学习生涯 8876

PHP preg_match_all详解

matches(注意这里是引用)是一个二维数组,matches[0] 是整个pattern匹配的结果。matches[1] 是第一个子模式(正则表达式中的子模式,就是圆括号括起来的部分)匹配的结果,matches是 第二个子模式的匹配结果。注意这个结果的形式,array[0]是整个pattern匹配到的结果,array[1]是pattern中子模式 (.*) 所匹配到的结果。flags 是可省略的,默认值是PREG_PATTERN_ORDER,还可以有其他值,这个会影响matches的内容形式。...

叶落无痕的博客 2457

基于STM32F407VET6的智能巡检小车灰度循迹系统优化设计

本文详细介绍了基于STM32F407VET6主控芯片的智能巡检小车灰度循迹系统优化设计。通过将传感器输出从数字量升级为模拟量以获取更丰富的路面信息,并采用PD控制算法结合速度管理策略,有效提升了小车在复杂弯道上的循迹稳定性与适应性。文章分享了硬件电路抗干扰设计、软件滤波及实战调优经验,为嵌入式开发者提供了从“能跑”到“跑得稳”的系统性解决方案。

weixin_28273593的博客 443

php正则表达式中preg_match_all函数的详解

php正则表达式中的函数我们之前为大家结果一个preg_match函数,相信大伙对此有所了解,那么php正则表达式中preg_match_all函数的具体使用是如何的呢?今天我们就带大家了解php正则表达式中preg_match_all函数的详解!了解正则表达式之前,须要掌握一些常用的正则表达式的基础知识,这些如果能记得最好记得,记不住须要用的时候能查到就行,就多个特殊字符,所以说正则表...

anbinmei9074的博客 705

西门子博途系列学习笔记SCL(三)______自由口通讯(RS485轮询程序)

西门子博途V16系列学习笔记SCL(三)___自由口通讯轮询程序(RS485) 西门子博途系列学习笔记SCL(三)______自由口通讯(RS485轮询程序) 文章目录西门子博途V16系列学习笔记SCL(三)___自由口通讯轮询程序(RS485)前言一、FreePort自由口通讯是什么?二、使用步骤1.模块参数定义2.定义FB功能块参数:3.程序代码如下(每天写代码100行,学不会你来找我):总结 前言 很长时间都没有更新了,主要是最近在学习罗克韦尔的STUDIO5000PLC编程软件,怎么说,和博

weixin_42940283的博客 1万+

基于RK3568的YOLOv11模型端侧推理优化与部署实战指南

在AI边缘计算领域,瑞芯微RK3568芯片凭借其强大的NPU算力和丰富的接口资源,成为了众多开发者的首选平台。然而,瑞芯微官方文档虽然提供了YOLO11预训练模型的部署方案,但对于需要自定义数据集训练的开发者来说,从模型训练到板端部署的完整流程却缺乏详细指导。本文将带你走完从环境搭建、数据准备、模型训练到最终板端部署的完整技术路线,并分享实际开发中遇到的各种坑点和解决方案。让我们一起探索如何在RK3568平台上实现30FPS稳定推理的YOLO11目标检测应用!

m0_64661770的博客 115

无涯教程-PHP - preg_match_all()函数

无涯教程网提供preg_match_all() - 语法 int preg_match_all ( string pattern , string string , ar...PREG_SET_ORDER - 将对数组的排序与默认设置有所不同。PREG_PATTERN_ORDER以您认为最合逻辑的方式指定顺序。PHP 中的 preg_match_all()函数 - 无涯教程网。PREG_PATTERN_ORDER - 如果不包括可选的。函数匹配字符串中所有出现的模式。

无涯教程 1358

rosbag分析传感器数据的时间同步情况方法

ROS传感器时间同步分析流程:通过rosbaginfo初步检查bag文件信息,使用rqt_bag可视化时间线分布,采用rostopicecho或Python脚本提取各传感器时间戳并计算时间差统计值(均值/最大差/标准差),最后分析接收与采样时间延迟。量化评估同步精度,识别固定偏移或随机抖动问题,确保多传感器数据对齐,为后续融合处理提供可靠数据基础。

start_up_go的博客 201

php 正则表达式-preg_match/preg_match_all

正则表达式的组成部分 1.定界符 (必须) 通常使用特殊字符组成,常用“/”。 2.原子(必须) 是正则表达式的最基本组成单元,而且在每个模式中最少要包含一个原子。原子是由所有那些未显示指定为元字符的打印和非打印字符组成,具体分为5类。 普通字符作为原子:如a~z,A~Z,0~9。 一些特殊字符和转义后元字符作为原子:\' \* \+ \? \.等。 一些非打印字符作为原子:如:f n ...

不知道起什么名字 2177

YOLO11涨点优化:半监督学习 | 结合Unbiased Teacher框架,利用海量无标签数据实现自训练暴力涨点

本文提出了一种基于Unbiased Teacher v2的半监督学习方法,用于解决YOLO11目标检测模型在标注数据不足时的性能瓶颈问题。通过分析纯监督YOLO11在小样本场景下的局限性,揭示了朴素自训练方法的三大陷阱:确认偏差、类别不均衡和噪声累积。文章详细解析了Unbiased Teacher框架的核心设计理念,包括教师-学生模型互监督机制、类别平衡损失和Burn-In预热策略,并重点介绍了v2版本针对无锚框检测器的优化。最后提出将Unbiased Teacher与YOLO11相结合的融合架构设计方案,

2601_95807009的博客 207

【从零开始入门unity游戏开发之——C#篇37】进程、线程、C# 中实现多线程有多种方案和async/await异步编程

进程、线程、C# 中实现多线程有多种方案和async/await异步编程

向宇的博客,专注php/web全栈 unity游戏开发,欢迎大家评论纠错 1469

php pregmatchall,php preg_match_all()函数介绍与用法

上午写了一篇关于php过滤特殊字符并保留中文,数字以及英文字母的文章,其中就用到了php中的预设函数 preg_match_all(),今天就有小伙件发私信说,能不能简单介绍一下这个 preg_match_all() 函数。查了一些资料,并写成了这篇文章php preg_match_all() 函数preg_match_all():用于执行一个全局正则表达式匹配。语法:intpreg_match...

weixin_42500454的博客 2103

YOLOv11知识蒸馏实战:让小模型拥有大模型90%精度,速度提升3倍的终极教程

在self.alpha = alpha # 蒸馏损失权重self.temperature = temperature # 温度系数,控制分布平滑度# 输出分布蒸馏(KL散度损失)# 中间特征蒸馏(MSE损失,对齐中间层特征)# 总蒸馏损失知识蒸馏是YOLOv11在“小模型高性能部署”场景的“破局之法”——它让小模型能“站在大模型的肩膀上”,兼具速度与精度。从损失函数定义到多阶段训练,再到实战落地,本教程已为你铺就了一条清晰的路径。

m0_64661770的博客 801

PHP中preg_match函数详解

PHP中preg_match函数详解

kongtaoxing的博客 7521

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

IEM模型,地表粗糙度模拟

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

php正则表达式之preg_match详解

preg_match 在目标字符串中搜索指定模式(你给的正则表达式),只匹配一次,匹配上了就马上停止搜索返回结果--它的值将是0次(不匹配)或1次。 参数列表: pattern 要搜索的模式 ; subject : 目标字符串; matches:如果提供了参数matches,它将被填充为搜索结果,$matches[0] 为完全匹配的字符串, $matches[1] 匹配的字符串在目标字符串偏移下标; flags:可选PREG_OFFSET_CAPTURE (值256),如果设置为PREG_..

滴水石穿 4241

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

php match_PHP preg_match_all() 函数

PHP preg_match_all() 函数preg_match_all 函数用于执行一个全局正则表达式匹配。语法int preg_match_all ( string $pattern , string $subject [, array &$matches [, int $flags = PREG_PATTERN_ORDER [, int $offset = 0 ]]] )搜索 su...

weixin_29159995的博客 301

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

PHP正则表达式使用指南:高效查找与preg_match函数详解

正则表达式,常被称作regex或regexp,是一种高效处理字符串的方法。在PHP编程中,它的应用非常广泛。今天,我们将探讨如何在PHP里利用正则表达式进行查找,尤其是在实际开发过程中如何高效地使用它。正则表达式基础正则表达式是一种用于识别字符串模式的工具。在PHP编程中

LKmZP8X的博客 503

php正则preg,php正则函数2preg_match_all

php正则函数二preg_match_all? ? ? ? 继续来说perl风格的正则函数preg_match_all。? ? ? ? 函数原型:?preg_match_all ($pattern, $subject, array &$matches = null, $flags = null, $offset = null)>?? ? ? ? 参数:完全和preg_match一样。...

weixin_42200791的博客 371

preg_match详解(反向引用和捕获组)

在讲preg_match函数之前,我们先了解一下什么是php可变变量。

m0_75178803的博客 2900

PHP正则表达式中的或操作:掌握preg_match()函数与模式匹配技巧

在PHP的正则表达式世界里,“或”操作是一个非常重要且常用的概念。它允许我们匹配多个可能的模式中的一个,这在处理各种复杂的文本处理场景中起到了关键作用。PHP正则表达式基础回顾我们得先对PHP正则表达式有个基本的认识。在PHP里,我们主要是通过preg_match()等函数来使用正则表达式的。

AWtVmfBu的博客 636

PHP preg_match()、preg_match_all()函数使用与对比

函数都用于在字符串中执行正则表达式匹配。它们的功能相似,但有一些区别。

headmaster_shan的博客 1249

【PHP正则表达式实战】:preg_match_all结果数组的3种高效遍历技巧

掌握preg_match_all结果数组的3种高效遍历技巧,解决PHP正则提取数据后处理难题。适用于文本解析、日志分析等场景,提升代码效率与可读性,值得收藏。

FuncIsle的博客 667

PHP教程_PHP5函数preg_match正则表达式匹配

PHP教程 PHP5函数preg_match正则表达式匹配。

goufeng93的博客 1298

PHP中preg_match_all函数正则匹配详解

preg_match_all函数是用来获取指定数据内容的,它经常用于执行正则表达多,下面我来给大家介绍两个关于preg_match_all函数实现教程,一个是获取url参数,一个是获取内容中图片方法。   preg_match_all — 执行一个全局正则表达式匹配 int preg_match_all ( string $pattern , string $subject [, array

qq_21743293的博客 1815

php正则匹配preg_match,php正则表达式中preg_match函数的详解

我们之前给大家介绍了php正则表达式的使用,入门,以及验证邮箱地址,那么我们今天就想大家介绍php正则表达式中的函数preg_match,preg_match函数在php正则表达式中的规则是怎样的?PHP正则表达式preg_match函数的使用:利用 preg_match(),可以完成字符串的规则匹配。如果找到一个匹配,preg_match() 函数返回 1,否则返回 0。还有一个可选的第三参数可...

weixin_35149412的博客 1858

如何使用PHP进行正则表达式匹配?

通过上述方法,可以灵活地在PHP中使用正则表达式进行各种文本匹配操作。无论是基础的字符匹配还是复杂的模式匹配,PHP都提供了丰富的函数和选项来满足不同的需求.

破损的天堂鸟博客 2081
上一篇: 别再盲目遍历了!用array_filter回调参数实现精准高效数据筛选
下一篇: 你真的会用orWhere吗?Laravel查询构建器中不可不知的4种高级用法
FastCompile
博客等级 码龄1年 164粉丝 2015原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值