PHP SPL RegexIterator从数组中删除不匹配的元素

时间:2014-08-20 18:56:21

标签: php regex spl

我有一些带有一些字符串的数组,我想用RegexIterator替换匹配字符串上的一些东西,但也要在数组中保留未匹配的字符串。

这是我的代码:

    $a = new ArrayIterator(array('LeaveThisInArray','value1', 'value2')); 
    $i = new RegexIterator($a, '/^(value)(\d+)/', RegexIterator::REPLACE); 
    $i->replacement = '$2:$1'; 

    print_r(iterator_to_array($i)); 

我得到这个作为输出:

    Array
(
    [0] => 1:value
    [1] => 2:value
)

但我想要的是:

 Array
        (
            [0] => LeaveThisInArray
            [1] => 1:value
            [2] => 2:value
        )

我可以设置任何标志或其他东西,因为我在spl文档中找不到多少。

2 个答案:

答案 0 :(得分:2)

您可以尝试使用preg_replace

示例代码:

$re = "/^(value)(\\d+)/m";
$str = "LeaveThisInArray\nvalue1\nvalue2";
$subst = '$2:$1';

$result = preg_replace($re, $subst, $str);

这是online demo


尝试在现有代码中使用^(value)(\d*)

答案 1 :(得分:1)

我现在能想到的最接近的是这样的:

$a = new ArrayIterator(array('LeaveThisInArray','value1', 'value2')); 
$i = new RegexIterator($a, '/^(?:(value)(\d+))?/', RegexIterator::REPLACE); 
$i->replacement = '$2$1'; 

print_r(iterator_to_array($i));