Помогите с str_replace () - PullRequest
2 голосов
/ 02 мая 2011

Я очищаю строку, удаляя строки в этом массиве:

$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 ]

5 голосов
/ 02 мая 2011

Предполагается, что ни одна из ваших строк не содержит /.Если это так, запустите 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 голос
/ 05 мая 2011

После того, как не удалось найти универсальное решение для регулярных выражений, может быть полезно следующее:

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

Получает несколько сложностей с границами слов в решениях на основе регулярных выражений.

0 голосов
/ 12 сентября 2013

Попробуйте это:

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