[英]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
一个稍微有点怪异的解决方案是在发送每个值之前添加一个@
符号。 这将使错误消息消失,并仅返回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);
};
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.