替换所有不包含的内容.ER

时间:2011-05-19 23:02:31

标签: php regex arrays indexing preg-replace

嘿伙计们,我怎么能替换索引名称中不包含quant的所有数组索引? 我试着这个:

for( $i = 0; $i < count( $query ); ++$i ){
          foreach( $query[$i] as $index => $data ){
               echo preg_replace( '/(?!quant(.*)$)/', '', $index ), '<br />';
          }
}

3 个答案:

答案 0 :(得分:1)

听起来你想要的只是过滤的索引,它不包含"quant"。如果是这样,那么一个简单的if就可以了,并且不需要正则表达式或任何字符串操作:

for ($i = 0; $i < count( $query ); ++$i) {
    foreach ($query[$i] as $index => $data) {
        if (strstr($index, "quant")) {
            echo $index, '<br />';
        }
    }
}

答案 1 :(得分:1)

考虑这个PHP代码来做这个过滤:

$array = array("quant1"=>1, "price1"=>2, "quant2"=>3, "price2"=>4, "quant3"=>3);
$filteredKeys = array_filter(array_keys($array), function ($elem) { return strpos($elem, "quant") !== false; } );
print_r(array_intersect_key($array, array_flip($filteredKeys))); 

输出

Array
(
    [quant1] => 1
    [quant2] => 3
    [quant3] => 3
)

答案 2 :(得分:1)

我认为这是你正在寻找的正则表达式:

^(?:(?!quant).)+)$

想法是在使用下一个字符之前在每个位置应用前瞻。这是另一种选择:

^(?!.*quant).+$

这里的前瞻只在字符串的开头应用一次。从那里开始,它扫描整个字符串,寻找quant的实例。如果找不到,前瞻就会成功,.+$继续前进并吞噬整个字符串。

编辑:还要注意我添加的开始锚点(^)。无论你最终使用什么正则表达式,必须锚定在两端。否则你永远不会确定你真的检查了整个字符串。