帮助str_replace()

时间:2011-05-02 13:18:41

标签: php regex str-replace

我正在清理删除此数组中字符串的字符串:

$regex = array("subida", " de"," do", " da", "em", " na", " no", "blitz");

这是我正在使用的str_replace:

for($i=0;$i<8;$i++){
    $twit = str_replace($regex[$i],'', $twit);
}

如果它只是字符串中的单词,我怎么才能删除一个单词,我的意思是,我有以下短语: “#blitz na subida do alfabarra blitz” 它会回报我: “#alfabarra”, 我不希望删除第一个“闪电战”,因为它有一个哈希“#”,我希望它输出: “#blitz alfabarra”,有可能吗?感谢

3 个答案:

答案 0 :(得分:5)

这假设您的所有字符串都没有/。如果是,请以preg_quote()作为第二个参数显式运行/

它还假设你想要匹配单词,所以我修剪了每个单词。

$words = array("subida", " de"," do", " da", "em", " na", " no", "blitz");

$words = array_map('trim', $words);

$words = array_map('preg_quote', $words);

$str = preg_replace('/\b[^#](?:' . implode('|', $words) . ')\b/', '', $str);

Codepad

答案 1 :(得分:1)

在未能提出全面的正则表达式解决方案后,以下内容可能会有用:

$words = array("subida", " de", " do", " da", "em", " na", " no", "blitz");
$words = array_map('trim', $words);

$str = '#blitz *blitz ablitz na subida do alfabarra blitz# blitz blitza';

$str_words = explode(' ', $str);
$str_words = array_diff($str_words, $words);
$str = implode(' ', $str_words);
var_dump($str);

在基于正则表达式的解决方案中,使用单词边界来解决一些复杂问题。

答案 2 :(得分:0)

试试这个:

for($i=0; $i<$regex('count'); $i++){
    foreach($regex[$i] as $key) {
        if ( is_string($key) ) {
            $twit = str_replace($regex[$i],'', $twit);
        }
    }
}