用正则表达式匹配和替换 php 字符串上的多模式
match and replace multi pattern on php string with regex
我有这样的代码来查找模式,例如##random_number_10## 我需要将数字 10 用作函数中的参数,该函数将转到 str_replace 替换模式
字符串:
ini subjek lur ##random_mix_5## ##random_string_up_10## ##random_number_15##
输出:
ini subjek lur o1ovp HDBVPVJTYY 741007211142434
.
function replace ($sumber) {
preg_match_all("/##random_number_(\d+)##/", $sumber, $match_number);
preg_match_all("/##random_string_up_(\d+)##/", $sumber, $match_string_up);
preg_match_all("/##random_string_low_(\d+)##/", $sumber, $match_string_low);
preg_match_all("/##random_string_uplow_(\d+)##/", $sumber, $match_string_uplow);
preg_match_all("/##random_mix_(\d+)##/", $sumber, $match_mix);
$dari = [
$match_number[0][0],
$match_string_up[0][0],
$match_string_low[0][0],
$match_string_uplow[0][0],
$match_mix[0][0]
];
$ke = [
random_number($match_number[1][0]),
random_string_up($match_string_up[1][0]),
random_string_low($match_string_low[1][0]),
random_string_uplow($match_string_uplow[1][0]),
random_mix($match_mix[1][0])
];
return str_replace($dari, $ke, $sumber);
};
问题是当我尝试替换所有这些时,如果字符串不包含其中一个搜索,则会出现错误。还有其他方法可以替换字符串上的模式吗?
您可能会收到 Undefined offset
通知,因为您引用了一个不存在的数组键:
$sumber = "ini subjek lur ##random_mix_5## ##random_string_up_10## ##random_number_15##";
preg_match_all("/##random_number_(\d+)##/", $sumber, $match_number);
preg_match_all("/##random_string_up_(\d+)##/", $sumber, $match_string_up);
preg_match_all("/##random_string_low_(\d+)##/", $sumber, $match_string_low);
preg_match_all("/##random_string_uplow_(\d+)##/", $sumber, $match_string_uplow);
preg_match_all("/##random_mix_(\d+)##/", $sumber, $match_mix);
var_dump($match_string_uplow[1][0]);
将输出:Notice: Undefined offset: 0 on line 11
一个稍微有点老套的解决方案是在发送每个值之前添加一个 @
符号。这将抑制错误消息并简单地 return 一个 NULL
值:
var_dump(@$match_string_uplow[1][0]);
将输出:NULL
现在也可能是你的错误是由你调用的函数生成的,如果你没有提交它一个值。在这种情况下,解决方案将取决于您的函数在定义值时的严格程度。
仅在匹配时构建 2 个数组:
function replace ($sumber) {
$dari = array();
$ke = array();
if (preg_match_all("/##random_number_(\d+)##/", $sumber, $match)) {
$dari[] = $match[0];
$ke[] = $match[1]
}
if (preg_match_all("/##random_string_up_(\d+)##/", $sumber, $match)) {
$dari[] = $match[0];
$ke[] = $match[1]
}
if (preg_match_all("/##random_string_low_(\d+)##/", $sumber, $match)) {
$dari[] = $match[0];
$ke[] = $match[1]
}
if (preg_match_all("/##random_string_uplow_(\d+)##/", $sumber, $match)) {
$dari[] = $match[0];
$ke[] = $match[1]
}
if (preg_match_all("/##random_mix_(\d+)##/", $sumber, $match)) {
$dari[] = $match[0];
$ke[] = $match[1]
}
return str_replace($dari, $ke, $sumber);
};
我有这样的代码来查找模式,例如##random_number_10## 我需要将数字 10 用作函数中的参数,该函数将转到 str_replace 替换模式
字符串:
ini subjek lur ##random_mix_5## ##random_string_up_10## ##random_number_15##
输出:
ini subjek lur o1ovp HDBVPVJTYY 741007211142434
.
function replace ($sumber) {
preg_match_all("/##random_number_(\d+)##/", $sumber, $match_number);
preg_match_all("/##random_string_up_(\d+)##/", $sumber, $match_string_up);
preg_match_all("/##random_string_low_(\d+)##/", $sumber, $match_string_low);
preg_match_all("/##random_string_uplow_(\d+)##/", $sumber, $match_string_uplow);
preg_match_all("/##random_mix_(\d+)##/", $sumber, $match_mix);
$dari = [
$match_number[0][0],
$match_string_up[0][0],
$match_string_low[0][0],
$match_string_uplow[0][0],
$match_mix[0][0]
];
$ke = [
random_number($match_number[1][0]),
random_string_up($match_string_up[1][0]),
random_string_low($match_string_low[1][0]),
random_string_uplow($match_string_uplow[1][0]),
random_mix($match_mix[1][0])
];
return str_replace($dari, $ke, $sumber);
};
问题是当我尝试替换所有这些时,如果字符串不包含其中一个搜索,则会出现错误。还有其他方法可以替换字符串上的模式吗?
您可能会收到 Undefined offset
通知,因为您引用了一个不存在的数组键:
$sumber = "ini subjek lur ##random_mix_5## ##random_string_up_10## ##random_number_15##";
preg_match_all("/##random_number_(\d+)##/", $sumber, $match_number);
preg_match_all("/##random_string_up_(\d+)##/", $sumber, $match_string_up);
preg_match_all("/##random_string_low_(\d+)##/", $sumber, $match_string_low);
preg_match_all("/##random_string_uplow_(\d+)##/", $sumber, $match_string_uplow);
preg_match_all("/##random_mix_(\d+)##/", $sumber, $match_mix);
var_dump($match_string_uplow[1][0]);
将输出:Notice: Undefined offset: 0 on line 11
一个稍微有点老套的解决方案是在发送每个值之前添加一个 @
符号。这将抑制错误消息并简单地 return 一个 NULL
值:
var_dump(@$match_string_uplow[1][0]);
将输出:NULL
现在也可能是你的错误是由你调用的函数生成的,如果你没有提交它一个值。在这种情况下,解决方案将取决于您的函数在定义值时的严格程度。
仅在匹配时构建 2 个数组:
function replace ($sumber) {
$dari = array();
$ke = array();
if (preg_match_all("/##random_number_(\d+)##/", $sumber, $match)) {
$dari[] = $match[0];
$ke[] = $match[1]
}
if (preg_match_all("/##random_string_up_(\d+)##/", $sumber, $match)) {
$dari[] = $match[0];
$ke[] = $match[1]
}
if (preg_match_all("/##random_string_low_(\d+)##/", $sumber, $match)) {
$dari[] = $match[0];
$ke[] = $match[1]
}
if (preg_match_all("/##random_string_uplow_(\d+)##/", $sumber, $match)) {
$dari[] = $match[0];
$ke[] = $match[1]
}
if (preg_match_all("/##random_mix_(\d+)##/", $sumber, $match)) {
$dari[] = $match[0];
$ke[] = $match[1]
}
return str_replace($dari, $ke, $sumber);
};