gpt4 book ai didi

php - preg_replace 替换捕获组内的符号

转载 作者:可可西里 更新时间:2023-10-31 22:54:39 27 4
gpt4 key购买 nike

我有点难过,我需要将一些字符括在引号内,但我需要将逗号替换为点 inside 被替换的文本。有一个命令吗?

目前,我正在这样做:

preg_replace( '[\b([0-9\.,]{16,})]', '="\1"', $chunk );

="" 包围超过 15 个符号的数字字符串,但我需要将任何现有的点转换为逗号(Excel 兼容性,不要问) .

我知道有两步解决方案,但我感觉我不知道某些 PHP/REGEX 功能可以更快/更好地完成它。


编辑: 性能最高的答案获胜,因为我将处理任意大小的 CSV 文件,这些文件可以增长到千兆字节(即使 I/O 可能是这里的瓶颈)。

最佳答案

preg_replace_callback()允许您使用匹配组数组创建回调函数;您返回的值是替换匹配项的值。在添加 ="" 之前,我们可以使用 str_replace() 将第二个捕获组的所有现有点替换为逗号。

preg_replace_callback(
'[(\b)([0-9\.,]{16,})]',
function($matches) {
$value = str_replace('.', ',', $matches[2]);
return $matches[1] . '="' . $value . '"';
},
$chunk
);

两个注意事项..首先,我会使用 "standard" delimiters 中的一个。 (/, ~, #)。其次,\b 只是匹配作为单词边界的位置。它实际上并不捕获任何数据。因此,您可以替换捕获组以使其更具可读性。最终表达:

preg_replace_callback(
'/\b[0-9\.,]{16,}/',
function($matches) {
$value = str_replace('.', ',', $matches[0]);
return '="' . $value . '"';
},
$chunk
);

关于php - preg_replace 替换捕获组内的符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23680610/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com