php - 在我不知道匹配实例数的正则表达式中替换匹配字符串中的特定字符
问题描述
我的正则表达式使用有点生疏,所以这是我目前的头条:
我有一个包含大量字段名称和值的长字符串。我已经对其进行了排序,将所有这些放入关联数组中,使用第一个条目作为我的键,第二个作为我的值等。
然而,有些值由多个条目组成,这会弄乱数组。
我的输入数据如下所示:
field_name_1|my value for 1|field_name_2|aaabbb sdsdsd|field_name_3|1232|0930|2245|field_name_4|value for 4
我通过在 | 上拆分来创建我的数组 字符,这很好用。问题是 field_name_3 的 4 位数字集也被视为我的数组中的键。
我需要做的是更换 | 就代码而言,这 4 位数字条目之间的字符和空格字符可以有效地将它们组合成一个值。
最终结果数组应包含以下内容:
field_name_1 => my value for 1
field_name_2 => aaabbb sdsdsd
field_name_3 => 1232 0930 2245
field_name_4 => value for 4
进一步说明:在这些示例之前和之后有许多字段。可以有任意数量的 4 位数字组来应用更改。
我有以下内容,它为 2 套做正确的事情,但它不能直接扩展到任何数量的套。
<?php
$data = "field_name_1|value 1|field_name_2|0624|0935|field_name_3|value 3";
$result = preg_replace("/(\d{4,4})\|(\d{4,4})/","$1 $2",$data);
echo $result;
?>
解决方案
我会在这里使用前瞻:
$data = "field_name_1|value 1|field_name_2|0624|0935|field_name_3|value 3";
$result = preg_replace("/(\d{4})\|(?=\d{4})/", "$1 ", $data);
echo $result;
这打印:
field_name_1|value 1|field_name_2|0624 0935|field_name_3|value 3
这个想法是一次只匹配一个 4 位序列以及一个管道,用相同的数字后跟一个空格替换该匹配项。您当前模式的问题是匹配并使用两组数字。所以对于以下输入:
field_name_1|value 1|field_name_2|0624|0935|1234|field_name_3|value 3
您当前的输出将是:
field_name_1|value 1|field_name_2|0624 0935|1234|field_name_3|value 3
请注意,不会更换第二个管道。
推荐阅读
- google-apps-script - Google Script - 如何将文档图像附加在一起?
- javascript - 为什么本地存储正在更改任务列表中的每个条目
- python-3.x - 我在 python3.8 中使用生成器生成斐波那契数列为什么这段代码没有给出任何输出?
- javascript - 循环遍历 Typescript 中的键值对
- angular - 管道中的多个 POST 调用未执行
- python - ValueError:int() 以 10 为底的无效文字:'[2,7,11,15]'
- css - 带列的角度材料选择
- excel-formula - SUM-IF 公式问题:跨和向下拖动公式时不显示结果
- macos - 允许 Visual Studio for Mac 使用桌面吗?
- c# - ASP.net 主机关闭连接