2016-11-09 25 views
2

我該如何在php中向另一個字符添加一個字符!一個字符串,也許正則表達式。附加到字符串中找到的字符

如果我有一個數組,可以說:

$array=["a","b","c","d","e","f","g","h","i","j"]; 
$long_string="yada yada yada yada yada...."; 

如果我想要一個驚歎號追加到每個$陣列的人物,發現$ long_string怎麼會是用正則表達式做了什麼?目前我的技能只能讓我選擇對字符串進行循環,而我知道這並不是最順利的方式。

感謝您的幫助!

回答

2

您可以使用str_replace這可能需要一個搜索和替換值的數組。替換值數組可以使用array_map從搜索字符數組中輕鬆構建。

參見PHP demo

$array=["a","b","c","d","e","f","g","h","i","j"]; 
$repl = array_map(function ($i) { return $i."!"; }, $array); 
$long_string="yada yada yada yada yada...."; 
echo str_replace($array, $repl, $long_string); 
// => ya!d!a! ya!d!a! ya!d!a! ya!d!a! ya!d!a!.... 

甲正則表達式的方法(如果搜索項是單字母字符):

$array=["a","b","c","d","e","f","g","h","i","j"]; 
$long_string="yada yada yada yada yada...."; 
$rx = "[" . implode("", $array) . "]"; 
echo preg_replace('/'.$rx.'/', '$0!', $long_string); 

PHP demo。正則表達式將是/[abcdefghij]/(與單個字符相匹配的字符類),並且替換字段包含添加到每個匹配的整個匹配($0)和!符號的反向引用。

如果你的搜索條目的多個字符的字符串,可以包含非字字符,它是使用更安全的交替組和preg_quote項目(demo):

$rx = "(?:" . implode("|", array_map(function($i) {return preg_quote($i, "/");}, $array)) . ")"; 
echo preg_replace('/'.$rx.'/', '$0!', $long_string); 

正則表達式看起來像(?:a|b|c|d|e|f|g|h|i|j)然後。

所有正則表達式可以在regex101.com測試。

+0

感謝你爲這個Wiktor的。如果角色說出這些:。 ;/\() –

+1

最後的解決方案將工作。儘管對於單個字符,您可以將最後一個與第一個結合起來。 '$ rx =「[」。 implode(「」,array_map(function($ i){return preg_quote($ i,「/」);},$ array))。 「]」;' –

+0

謝謝你,現在回家吧,當我進來的時候會試試。 –

0

它不是正則表達式,但你可以有一個簡單的解決方案,而無需通過串不必循環:

$array=["a","b","c","d","e","f","g","h","i","j"]; 
$long_string="yada yada yada yada yada...."; 
$array_string = str_split($long_string); 
$unique = array_unique($array_string); 

foreach($array as &$a){ 
    if(in_array($a,$unique)){ 
    $a = $a.'!'; 
    } 
} 

var_dump($array); 

輸出:

array(10) { 
    [0]=> 
    string(2) "a!" 
    [1]=> 
    string(1) "b" 
    [2]=> 
    string(1) "c" 
    [3]=> 
    string(2) "d!" 
    [4]=> 
    string(1) "e" 
    [5]=> 
    string(1) "f" 
    [6]=> 
    string(1) "g" 
    [7]=> 
    string(1) "h" 
    [8]=> 
    string(1) "i" 
    [9]=> 
    string(1) "j" 
} 

我希望它能幫助

+0

謝謝你的時間,但我不想使用for循環。長字符串可能是博客文章或評論。 –