返回下划线后的数字,动态前置

时间:2013-06-22 21:59:37

标签: php regex string

我在PHP数组中有各种值,如下所示:

$values = array("news_24", "news_81", "blog_56", "member_55", "news_27");

下划线(新闻,博客,成员)之前的第一部分是动态的,所以我希望获得特定部分( news )中的所有匹配,然后是数字。

如下所示:

$section = "news";
$matches = preg_match('$section/[_])GETNUMBER/', $values);

这将返回24和27,但只有新闻出现在下划线之前。

感谢。

3 个答案:

答案 0 :(得分:1)

$values = array("news_24", "news_81", "blog_56", "member_55", "news_27");

$section = "news"; 
foreach($values as $value) {
    $matches = preg_match("/{$section}_(\\d+)/", $value, $number);
    if ($matches)
        echo $number[1], PHP_EOL;
}

答案 1 :(得分:1)

$values = array("news_24", "news_81", "blog_56", "member_55", "news_27");

function func($type){
    $results = null;
    foreach($values as $val){
        $curr = explode('_',$val);
        if($curr[0]==$type){
            $results[] = $curr[1];
        }
    }
    return $results;
}

$News = func('news');
祝你好运! :P

答案 2 :(得分:0)

注意我添加了两个案例:

$values = array ("news_24", "news_81", "blog_56", "member_55", "news_27",
                 "blognews_99", "news_2012_12");

$section = "news";

preg_match_all("/^{$section}_(\\d+)\$/m", implode("\n", $values), $matches);

print_r($matches[1]);

内爆可能效率不高,但代码更少。 区别在于匹配&正则表达式。

此解决方案仅输出

Array
(
    [0] => 24
    [1] => 81
    [2] => 27
)

虽然其他人也输出了2012而马克的解决方案也是99。