preg_replace效率

时间:2011-10-04 14:55:47

标签: php arrays preg-replace str-replace

我正在使用preg_replace来实现流行语类型功能,使用流行语列表,在文章中搜索它们,然后使用preg_replace包装它们周围的链接。

我的流行语是:

Online Marketing
Social Media Markeing
Social Media
Social
Brand Marketing
Brand
Search Engine Optimisation
SEO
Email Marketing
Email
Twitter
Facebook
LinkedIn

我正在做这样的preg_replace ......

$text = preg_replace("/Online Marketing/", "<a href='".$base."online-marketing/'>Online Marketing</a>", $text);

但问题是我必须为每个可能的变体做一个preg_replace,如此......

$text = preg_replace("/Online Marketing/", "<a href='".$base."online-marketing/'>Online Marketing</a>", $text);
$text = preg_replace("/Online marketing/", "<a href='".$base."online-marketing/'>Online marketing</a>", $text);
$text = preg_replace("/online marketing/", "<a href='".$base."online-marketing/'>online marketing</a>", $text);

这是非常长的啰嗦,现在我知道我可以使用str_repalce这样的数组:

$from = array("Online Marketing", "Online marketing", "online marketing");
$name = str_replace($from, "", $text);

但我看不出找到阵列的哪个部分匹配然后用正确的链接替换它的方法,因为你可以看到上面的str_replace只是完全删除了我的流行语,它只是一个例子。

所以我想知道是否有人能够帮助我找到在str_replace或preg_replace中使用一系列流行语的方法,但也要确保它使用正确的链接重新制作流行语。

希望有人可以提供帮助

4 个答案:

答案 0 :(得分:2)

$test = preg_replace("/online marketing/i", "<a href='".$base."'online-marketing/'>$0</a>, $text);

或者,如果保持大写不重要:

$test = str_ireplace("online marketing", "<a href='".$base."'online-marketing/'>online marketing</a>, $text);

答案 1 :(得分:0)

函数preg_replace可以接收第二个替换数组。 如果你要使用相同的语法,你可以做一个循环来生成链接(而不是每次你想要一个元素时自己编写)

$base = 'base/';
$from = array("Online Marketing", "Online test", "offline test");
$to = array();
foreach($from AS $key=>$f) {
   $from[$key] = "/".$f."/";    
   $to[$key]="<a href='".$base.$f."/'>online marketing</a>";
}
$string = 'this is a test using Online Marketing and offline test';
$text = preg_replace($from, $to, $string);

答案 2 :(得分:0)

您可以将str_ireplace()与数组一起使用(这是一个不区分大小写的匹配字符串替换),因此如果找到某个匹配项,它将用其他数组中的相应替换替换它。

EG:

$needles = array("Online Marketing", "Online Games", "Online Shopping");

$replacements = str_replace('<a href="online_marketing.html>Online Marketing</a>"',
                             '<a href="online_games.html">Online Games</a>',
                             '<a href="online_shopping.html">Online Shopping</a>');

    $replaced = str_ireplace($needles, $replacements);

    // Show the replaced text
    echo $replaced;
);

答案 3 :(得分:0)

我把你所有的答案混合在一起,这是我完成的结果......

$Fbuzzwords = array(" online marketing", " social media marketing", " social-media-marketing", " social media", 
                " social", " brand marketing", " brand", " search engine optimisation", " seo", " email marketing", 
                " email", " e-mail marketing", " e-mail", " tiwtter", " facebook", " linkedin");

$Ubuzzwords = array("online-marketing", "social-media-marketing", "social-media-marketing", "social-media-marketing", 
                "social-media-marketing", "brand-marketing", "brand-marketing", "search-engine-optimisation", 
                "search-engine-optimisation", "online-marketing", "online-marketing", "online-marketing", 
                "online-marketing", "social-media-marketing", "social-media-marketing", "social-media-marketing");

$i = 0;

foreach ($Fbuzzwords as $buzzword)
{
    $url = $Ubuzzwords[$i];

    $Rbuzzwords = array(" <a href='".$base.$url."/'>online marketing</a>", " <a href='"
.$base.$url."/'>social media marketing</a>", 
                " <a href='".$base.$url."/'>social-media-marketing</a>", " <a href='".$base.$url."/'>social media</a>", 
                " <a href='".$base.$url."/'>social</a>", " <a href='".$base.$url."/'>brand marketing</a>", 
                " <a href='".$base.$url."/'>brand</a>", " <a href='".$base.$url."/'>search engine optimisation</a>", 
                " <a href='".$base.$url."/'>seo</a>", " <a href='".$base.$url."/'>email marketing</a>", 
                " <a href='".$base.$url."/'>email</a>", " <a href='".$base.$url."/'>e-mail marketing</a>", 
                " <a href='".$base.$url."/'>e-mail</a>", " <a href='".$base.$url."/'>tiwtter</a>", 
                " <a href='".$base.$url."/'>facebook</a>", " <a href='".$base.$url."/'>linkedin</a>");

    $replacement = $Rbuzzwords[$i];

    $text = preg_replace("/$buzzword/i", "$replacement", $text);

    $i++;
}

所以我有3个数组,1个用于在页面上找到单词,2个用于url,我循环遍历数组每个部分的所有文本,确保我抓住每个案例