仅替换前面没有哈希符号的整个单词匹配

问题描述 投票:0回答:3

我通过删除此数组中找到的字符串来清理字符串:

$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
,因为它前面有一个散列(
#
),我希望它输出:

#blitz alfabarra
php regex replace word-boundaries
3个回答
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);

键盘


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

解决了基于正则表达式的解决方案中字边界的一些复杂问题。


0
投票

试试这个:

for($i=0; $i<$regex('count'); $i++){
    foreach($regex[$i] as $key) {
        if ( is_string($key) ) {
            $twit = str_replace($regex[$i],'', $twit);
        }
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.