php - php preg拆分数据
问题描述
我想按部分分割文本以及 === === 内部的部分名称所以数据就像
===A===
a
===B===
b
===C===
c
preg split 就像:
$sections = preg_split('/===([^=]+)===(?!=)/', $text, -1, PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE);
但如果数据像
===A===
a
====0====
0
===B===
b
===C===
c
它出错了(我只需要用 3x === 将其拆分并忽略其他部分),这就是为什么后面会有负面的看法。
编辑:事实证明,问题是 split 从 ====0==== 获取了最后一个 === 并制作了新的假部分名称,直到第一个 === of ===B=== 所以它是由
====0====
0
===B===
像这样的新假部分(删除括号中的内容)
(====0=)===
0
===(B===)
解决方案
这是使用 的一种方法prep_match_all
,具有以下正则表达式模式:
(?!<=)={3,}[^=]+={3}(?!=).*?(?=[^=]={3}[^=]+={3}[^=]|$)
该模式表示匹配一个节标题,由三个定义,=
中间有一些其他字符,然后是所有内容,直到到达另一个节标题或整个输入的末尾。
$input = "===A===
a
====0====
0
===B===
b
===C===
c";
preg_match_all("/(?!<=)={3,}[^=]+={3}(?!=).*?(?=[^=]={3}[^=]+={3}[^=]|$)/s", $input, $sections);
print_r($sections[0]);
这打印:
Array
(
[0] => ===A===
a
====0====
0
[1] => ===B===
b
[2] => ===C===
c
)
请注意,我们/s
将 PHP 正则表达式模式中的修改用于 dot all 模式。这确保.*
了模式中使用的 跨换行符匹配。
推荐阅读
- vba - 公式 VBA Excel 中的变量语法
- django - 在 pythonanywhere 上将迁移文件部署到生产环境
- c++ - utf-8 编码 Visual Studios 十进制值
- javascript - 如何根据选择的半径显示谷歌地图
- angular - Angular 5 - Observables:无法使用 Firestore 访问文档的值
- android - 获取 Firebase 设备令牌 android delphi 10.2
- gradle - Gradle 离线使用插件和依赖
- r - glm中的smooth.spline与数据集中的NA
- java - 选项卡布局内的水平回收器视图
- laravel - Laravel验证数组,访问验证元素?