附加到字符串

时间:2016-11-09 13:16:44

标签: php regex

我怎样才能在php中将一个角色附加到另一个角色中!一个字符串,可能是正则表达式。

如果我有阵列,请说:

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

如果我想在$ array中的每个字符上附加一个感叹号,在$ long_string中找到如何用正则表达式完成?目前我的技能只能让我选择在字符串上循环,我明白这不是最顺利的方法。

感谢任何帮助!

2 个答案:

答案 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"
}

我希望它有所帮助