Car*_*rey 5 php regex arrays preg-replace
我有一个相对较大的元素数组,我想搜索一个字符串并替换任何匹配.我目前正在尝试使用preg_replace正则表达式:
preg_replace("/\d?\dIPT\.\w/", "IPT", $array);
Run Code Online (Sandbox Code Playgroud)
我希望得到所有匹配的值00IPT.A或0IPT.A(0表示任何数字字符和A代表任何字母)并替换它们IPT.但是,我正在获取数组到字符串转换通知.有没有办法preg_replace接受数组数据源?如果没有,还有其他方法可以实现吗?
编辑:
文档说preg_replace应该能够接受数组源 - 这就是我要问的原因.
字符串或包含要搜索和替换的字符串的数组.如果subject是数组,则对主题的每个条目执行搜索和替换,并且返回值也是数组.
如果有帮助(在一个主阵列下有多个数组),该数组是多维的.
preg_replace不会在适当的地方修改.要永久修改$array,您只需将结果分配preg_replace给它:
$array = preg_replace("/\d{1,2}IPT\.\w/", "IPT", $array);
Run Code Online (Sandbox Code Playgroud)
适合我.
$array = array('00IPT.A', '0IPT.A');
$array = preg_replace("/\d{1,2}IPT\.\w/", "IPT", $array);
var_dump($array);
// output: array(2) { [0]=> string(3) "IPT" [1]=> string(3) "IPT" }
Run Code Online (Sandbox Code Playgroud)
注意:\d{1,2}表示一位或两位数.
如果要对二维数组执行此操作,则需要遍历第一维:
$array = array( array('00IPT.A', 'notmatch'), array('neither', '0IPT.A') );
foreach ($array as &$row) {
$row = preg_replace("/\d{1,2}IPT\.\w/", "IPT", $row);
}
var_dump($array);
Run Code Online (Sandbox Code Playgroud)
输出:
array(2) {
[0]=> array(2) {
[0]=> string(3) "IPT"
[1]=> string(8) "notmatch"
}
[1]=> &array(2) {
[0]=> string(7) "neither"
[1]=> string(3) "IPT"
}
}
Run Code Online (Sandbox Code Playgroud)
请注意,您必须通过引用(&$row)遍历每一行,否则将不会修改原始数组.