我怎样才能在php中将一个角色附加到另一个角色中!一个字符串,可能是正则表达式。
如果我有阵列,请说:
$array=["a","b","c","d","e","f","g","h","i","j"];
$long_string="yada yada yada yada yada....";
如果我想在$ array中的每个字符上附加一个感叹号,在$ long_string中找到如何用正则表达式完成?目前我的技能只能让我选择在字符串上循环,我明白这不是最顺利的方法。
感谢任何帮助!
答案 0 :(得分: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
)的反向引用和添加到每个匹配的!
符号。 / p>
如果您的搜索项是多个字符串并且可以包含非单词字符,则使用交替组并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进行测试。
答案 1 :(得分: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"
}
我希望它有所帮助