如何替换长文本中具有动态数字的所有特定字符串?
How can i replace all specific strings in a long text which have dynamic number in between?
我正在尝试替换包含特定字符串(包括中间的动态数字)的字符串。
我试过 preg_match_all 但它给了我 NULL 值
以下是我实际要查找的所有详细信息:
在我的长文本中有包含此 [_wc_acof_(some dynamic number)]
的值,即:[_wc_acof_6] 我想将它们转换为 $postmeta['_wc_acof_14'][0]
在同一个长文本中可以有多个。
我想运行通过这个逻辑:
1- 首先我得到 [_wc_acof_
之后的所有数字,然后使用 preg_match_all 将它们保存在数组中按照此处的指导 get number after string php regex
2- 然后我 运行 一个 foreach 循环并使用该数字为 patterns 和 replacements 设置我的数组,即:
foreach ($allMatchNumbers as $MatchNumber){
$key = "[_wc_acof_" . $MatchNumber. "]";
$patterns[] = $key;
$replacements[] = $postmeta[$key][0];
}
3- 然后我用这个替换 echo preg_replace($patterns, $replacements, $string);
But i am unable to get preg_match_all it gives me NULL where i tried below
preg_match_all('/[_wc_acof_/',$string,$allMatchNumbers );
请帮忙?我不确定 preg_grep 是否比这更好?
您似乎想分阶段处理输入,首先获取特定词汇上下文中的所有数字,然后使用某种查找技术修改用户输入。
第一步可以实现为
preg_match_all('~\[_wc_acof_(\d+)]~', $text, $matches)
将 [_wc_acof_
和 ]
之间的一个或多个数字的所有序列提取到第 1 组(您可以通过 $matches[1]
访问这些值)。
然后,您可以使用这些值填充 $replacements
数组。
接下来,您可以使用
preg_replace_callback('~\[_wc_acof_(\d+)]~', function($m) use ($replacements){
return $replacements[$m[1]];
}, $text)
参见PHP demo:
<?php
$text = '<p>[_wc_acof_6] i want to convert this and it contains also this [_wc_acof_9] or can be this [_wc_acof_11] number can never be static</p>';
if (preg_match_all('~\[_wc_acof_(\d+)]~', $text, $matches)) {
foreach($matches[1] as $matched){
$replacements[$matched] = 'NEW_VALUE_FOR_'.$matched.'_KEY';
}
print_r($replacements);
echo preg_replace_callback('~\[_wc_acof_(\d+)]~', function($m) use ($replacements){
return $replacements[$m[1]];
}, $text);
}
输出:
Array
(
[0] => 6
[1] => 9
[2] => 11
)
NEW_VALUE_FOR_6_KEY i want to convert this and it contains also this NEW_VALUE_FOR_9_KEY or can be this NEW_VALUE_FOR_11_KEY number can never be static
我正在尝试替换包含特定字符串(包括中间的动态数字)的字符串。 我试过 preg_match_all 但它给了我 NULL 值
以下是我实际要查找的所有详细信息:
在我的长文本中有包含此 [_wc_acof_(some dynamic number)]
的值,即:[_wc_acof_6] 我想将它们转换为 $postmeta['_wc_acof_14'][0]
在同一个长文本中可以有多个。
我想运行通过这个逻辑:
1- 首先我得到 [_wc_acof_
之后的所有数字,然后使用 preg_match_all 将它们保存在数组中按照此处的指导 get number after string php regex
2- 然后我 运行 一个 foreach 循环并使用该数字为 patterns 和 replacements 设置我的数组,即:
foreach ($allMatchNumbers as $MatchNumber){
$key = "[_wc_acof_" . $MatchNumber. "]";
$patterns[] = $key;
$replacements[] = $postmeta[$key][0];
}
3- 然后我用这个替换 echo preg_replace($patterns, $replacements, $string);
But i am unable to get preg_match_all it gives me NULL where i tried below
preg_match_all('/[_wc_acof_/',$string,$allMatchNumbers );
请帮忙?我不确定 preg_grep 是否比这更好?
您似乎想分阶段处理输入,首先获取特定词汇上下文中的所有数字,然后使用某种查找技术修改用户输入。
第一步可以实现为
preg_match_all('~\[_wc_acof_(\d+)]~', $text, $matches)
将 [_wc_acof_
和 ]
之间的一个或多个数字的所有序列提取到第 1 组(您可以通过 $matches[1]
访问这些值)。
然后,您可以使用这些值填充 $replacements
数组。
接下来,您可以使用
preg_replace_callback('~\[_wc_acof_(\d+)]~', function($m) use ($replacements){
return $replacements[$m[1]];
}, $text)
参见PHP demo:
<?php
$text = '<p>[_wc_acof_6] i want to convert this and it contains also this [_wc_acof_9] or can be this [_wc_acof_11] number can never be static</p>';
if (preg_match_all('~\[_wc_acof_(\d+)]~', $text, $matches)) {
foreach($matches[1] as $matched){
$replacements[$matched] = 'NEW_VALUE_FOR_'.$matched.'_KEY';
}
print_r($replacements);
echo preg_replace_callback('~\[_wc_acof_(\d+)]~', function($m) use ($replacements){
return $replacements[$m[1]];
}, $text);
}
输出:
Array
(
[0] => 6
[1] => 9
[2] => 11
)
NEW_VALUE_FOR_6_KEY i want to convert this and it contains also this NEW_VALUE_FOR_9_KEY or can be this NEW_VALUE_FOR_11_KEY number can never be static