寻找一种从数组中提取匹配的字符串部分的简单方法

时间:2015-04-27 08:41:28

标签: php arrays regex

我想提取字符串的匹配部分 - 数组中的数字部分 array("HK00003.Day","HK00005.Day")

<?php
$arr=array("HK00003.Day","HK00005.Day");
$result= array();
foreach ($arr as $item){
    preg_match('/[0-9]+/',$item,$match);
    array_push($result,$match[0]);
}

它可以得到结果:00003 00005,看起来很乏味,preg_grep看起来很简单,但结果不是我想要的。

preg_grep('/[0-9]+/',$arr);

输出为“HK00003.Day”,“HK00005.Day”,而不是00003 00005
是否有更简单的方法来完成工作?

4 个答案:

答案 0 :(得分:1)

这应该适合你:

(在这里,我只是摆脱阵列中的每个角色,而不是preg_replace()的数字)

<?php

    $arr = ["HK00003.Day", "HK00005.Day"];
    $result = preg_replace("/[^0-9]/", "", $arr);

    print_r($result);

?>

输出:

Array ( [0] => 00003 [1] => 00005 )

答案 1 :(得分:1)

您可以使用preg_filter(已使用<?php $arr = array("HK00003.Day","HK00005.Day"); $matches = preg_filter('/^.*?([0-9]+).*/', '$1',$arr); print_r($matches); ?> 并且不需要其他回调函数)将数组中的每个条目替换为内部数字:

Array                                                                                                                                                                                                                                                  
(                                                                                                                                                                                                                                                      
    [0] => 00003                                                                                                                                                                                                                                       
    [1] => 00005                                                                                                                                                                                                                                       
)   

输出sample program

<?php
$headers = 'From: webmaster@test.com' . "\r\n" .
                'Reply-To: webmaster@test.com' . "\r\n" .
               'MIME-Version: 1.0' . "\r\n"  . 'Content-type: text/html; charset=iso-8859-1' . "\r\n" .
                'X-Mailer: PHP/' . phpversion();
$to='testmail@test.com';
$subject='from camera with image mod';
$message=$_POST["msgbody"];
mail($to, $subject, $message, $headers);
?>

答案 2 :(得分:0)

你的代码很好,一点都不乏味。如果你想要一个单行程,你可以尝试这样的东西(删除所有不是数字的东西):

array_push($result, preg_replace("~[^0-9]~", "", $item));

答案 3 :(得分:0)

preg_grep返回与模式匹配的数组条目!因此,它返回一个条目数组而不是匹配的字符串

尝试以下:

preg_match_all('/[0-9]+/',implode('-',$arr),$result);