用列表中的随机单词替换单词


PHP Replace a word with a random word from a list?

使用PHP,我正在寻找一段文本并通过它搜索并将某些单词替换为列表中的另一个单词。

搜索文本以找到列表中的任何单词:漂亮,漂亮,漂亮,可爱,有吸引力,有吸引力的

,然后用同一列表中的另一个单词替换该单词(但不选择相同的单词)。

希望这是有意义的!

您可以使用preg_replace_callback:

$random_string = '…';
$needle = array('pretty', 'beautiful', 'gorgeous', 'lovely', 'attractive', 'appealing');
$new_string = preg_replace_callback(
  array_map(
    function($v) { return '/'.preg_quote($v).'/'; }, // assuming $needle does not contain '/' 
    $needle),
  function($matches) use($needle) {
    do {
      $new = $needle[rand(0, count($needle)-1)];
    while($new != $matches[0]) {
    return $new;
  },
  $random_string);

为了确保你的$needle数组不包含在正则表达式中有特殊意义的字符,我们在搜索之前对数组的每一项调用preg_quote

而不是做do{}while()循环,你也可以复制数组并删除匹配的单词(很大程度上取决于实际数据:很少的项目→复制&删除,许多项目→随机选择一个,直到它与匹配不同)