从数组中删除与某个单词匹配的所有字符串(php)

时间:2013-04-22 18:19:04

标签: php regex arrays

我有一个字符串数组,并希望从数组中删除包含“Free_Course”一词的所有元素

数组包含“Free_Course_123”,“Free_Course_124”,“Other_Course_123”,Other_Course_1234等字符串。

我只想循环遍历数组,并删除所有包含“Free_Course”的内容,这样就可以摆脱上面列出的前两个元素。

我尝试过使用这个preg_grep函数,但到目前为止还没有成功:

$cleanTags= preg_grep("/^Free_Course*/", $tags);

8 个答案:

答案 0 :(得分:3)

您可以使用本机PHP函数 strpos http://php.net/manual/fr/function.strpos.php)来识别数组中应删除的值:

<?php

foreach ($tags as $index => $tag) {
      if (strpos($tag, 'Free_Course') !== false) {
          unset($tags[$index]);
      }
}

答案 1 :(得分:1)

你可以做一个preg_match,只返回那些不匹配的。

foreach($array as $key => $value)
    if(!preg_match("/Free_Course/i", $value))
        echo $value . '<br>';

或者创建一个新阵列......

foreach($array as $key => $value)
    if(!preg_match("/Free_Course/i", $value))
        $new_array[] = $value;

答案 2 :(得分:1)

试试这个

<?php
foreach( $tags as $key => $val )
{
   if( !preg_grep( "/(?!Free_Course).*/", $tags ) ) {
      echo $val;
   }
}
?>

答案 3 :(得分:0)

你试过吗

$tags = array(
    "Free_Course_123", 
    "Free_Course_124", 
    "Other_Course_123", 
    "Other_Course_1234"
);
$cleanTags= preg_grep("/Free_Course/", $tags, PREG_GREP_INVERT);
print_r($cleanTags);

?最后一个属性反转过滤器函数,请参阅the manual

我已经测试了结果,它应该从PHP 4.2.0开始工作

Array ( [2] => Other_Course_123 [3] => Other_Course_1234 )

答案 4 :(得分:0)

使用array_walk:

$arr = array(
    "Free_Course_123", 
    "Free_Course_124", 
    "Other_Course_123", 
    "Other_Course_1234"
);

$arr = array_filter($arr, function($e){
    return strpos($e, 'Free_Course') === false;
});

(编辑:我误解了这个问题)

答案 5 :(得分:0)

答案 6 :(得分:0)

$ cleanTags = array_diff($ tags,preg_grep(“/ Free_Course。* /”,$ tags));

答案 7 :(得分:0)

“^”仅表示在字符类列表的开头使用时的否定,即“[^ a-zA-Z0-9] +表示”一个或多个不是字母数字字符的字符“。

如果在(perl)正则表达式的开头使用“^”,则表示“跟随必须位于行的开头”。因此,“/ ^ Free_Course * /”将匹配任何以“Free_Course'文本的零个或多个实例”开头的字符串,这不是您想要的。

我会使用Thierry Marianne的解决方案。

如果你想知道,“我怎么用正则表达式否定一个单词?”,请看这个主题:

Regular expression to match a line that doesn't contain a word?