簡體   English   中英

將特定的字符串模式替換為html

[英]replace specific string pattern to html

對於我的股票市場聊天,我想將每個特定的字符串模式替換為HTML代碼。 例如,如果我鍵入“b $ goog 780”,我希望將此字符串替換為:

Buy <a href="/stocks/goog">$goog</a> at 780 

如何使用preg_replace執行此特定任務?

$cmd='b $goog 780';

if(preg_match('/^([bs])\s+?\$(\w+?)\s+?(.+)$/i',$cmd,$res))
{
   switch($res[1])
   {
     case 'b': $cmd='buy';break;
     case 's': $cmd='sell';break;
   }
   $link=$cmd.' <a href="/stocks/'.$res[2].'">'.$res[2].'</a> at '.$res[3];
   echo $link;
}
$stocks = array('$goog' => '<a href="/stocks/goog">$goog</a>',
                '$apple' => '<a href="/stocks/apple">$apple</a>');

// get the keys.
$keys = array_keys($stocks);

// get the values.
$values = array_values($stocks);

// replace
foreach($keys as &$key) {
        $key = '/\b'.preg_quote($key).'\b/';
}

// input string.    
$str = 'b $goog 780';

// do the replacement using preg_replace                
$str = preg_replace($keys,$values,$str);

它必須是preg_replace嗎? 使用preg_match,您可以提取字符串的組件並重新組合它們以形成您的鏈接:

<?php
$string = 'b $goog 780';
$pattern = '/(b \$([^\s]+) (\d+))/';
$matches = array();
preg_match($pattern, $string, $matches);
echo 'Buy <a href="/stocks/' . $matches[2] . '">$' . $matches[2] . '</a> at ' . $matches[3] ; // Buy <a href="/stocks/goog">$goog</a> at 780 

模式正在尋找的是字母'b',后跟一個美元符號( \\$ - 我們逃避美元,因為這是正則表達式中的特殊字符),然后是任何和每個字符,直到它到達一個空格( [^\\s]+ ),然后是一個空格,最后是任意數量的數字( \\d+ )。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM