regex 取消某些元素的资格并从字符串数组中隔离尾随数字

zpf6vheq  于 2023-10-22  发布在  其他
关注(0)|答案(4)|浏览(133)

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

$values = ["news_24", "news_81", "blog_56", "member_55", "news_27"];

下划线(news,blog,member)之前的第一部分是动态的,所以我想在特定部分(news)中获得所有匹配项,然后是数字。
类似下面的东西:

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

解决方案应该返回24、81和27,因为只有这些数字出现在news和下划线之后。

up9lanfz

up9lanfz1#

$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;
}
rsaldnfx

rsaldnfx2#

$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

6gpjuf90

6gpjuf903#

注:我添加了两个案例:

$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]);

内爆可能不是超级高效,但它的代码更少。区别在于匹配的& regex。
此解决方案仅输出

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

而其他人也输出2012和马克的解决方案也99。

cwdobuhd

cwdobuhd4#

PHP有一个原生函数来完成这个任务:preg_filter()。它尝试对数组中的所有元素进行替换,并且只返回成功发生变化的元素。
匹配可变换行的部分单词,然后匹配原义下划线,然后捕获尾随数字。用捕获的数字替换整个字符串。
代码:(Demo

$section = 'news';
var_export(
    preg_filter("/{$section}_(\d+)/", '\1', $array)
);

输入:

$array = [
    "news_24",
    "news_81",
    "blog_56",
    "member_55",
    "news_27"
];

输出量:

array (
  0 => '24',
  1 => '81',
  4 => '27',
)

相关问题