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

PHP SPL RegexIterator从数组中删除不匹配的元素,php,regex,spl,Php,Regex,Spl,我有一个带有一些字符串的数组,我想使用RegexIterator替换匹配字符串上的一些内容,但也要在数组中保留不匹配的字符串 这是我的密码: $a = new ArrayIterator(array('LeaveThisInArray','value1', 'value2')); $i = new RegexIterator($a, '/^(value)(\d+)/', RegexIterator::REPLACE); $i->replacement = '$2

我有一个带有一些字符串的数组,我想使用
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文档中找不到太多内容,所以我可以设置任何标志或其他东西。

您可以尝试使用
preg\u replace

示例代码:

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

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



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

我现在能想到的最接近的方法是:

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

我是这样做的,我只是想看看这样的事情是否可行,因为我喜欢使用SPL,非常喜欢:Dtry last选项,将数字设置为零或更多次。没错,我会尝试使用正则表达式,它本身:)阅读报告的错误。读是的,也许,但没有分号。分号是什么?如何添加它?我尝试了相同的解决方案,但仍坚持使用分号。您可以将替换设置为“$2:$1”,但它会将分号添加到LeaveThisinarray。我意识到,在发布评论后,我成功地将分号仅添加到匹配的元素。