用于输入流上的随机文本替换的正则表达式

时间:2010-03-07 13:42:54

标签: php regex parsing

我在下面有一段文字,我想使用输入源。我希望doSpin()函数获取文本流并从每个[%替换候选者%组]中随机选择一个值。

  

这[%should |应该|将|%]制作   它多[多%   方便|更快|更容易%]和帮助   减少重复内容。

因此,当过滤时,这句话可能会在输入时产生以下任何内容......

1)这应该更方便,有助于减少重复内容。

2)这应该更快,并有助于减少重复内容。

3)这样可以更轻松,更有助于减少重复内容。

// So the code stub would be...

$content = file_get_contents('path to my input file');

function doSpin($content)
{
// REGEX MAGIC HERE
return $content;
}

$myNewContent = doSpin($content);

*我知道正则表达的zilch。但我知道我要做的事情需要它。

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

使用preg_replace_callback()

function doSpin($content) {
  return preg_replace_callback('!\[%(.*?)%\]!', 'pick_one', $content);
}

function pick_one($matches) {
  $choices = explode('|', $matches[1]);
  return array_rand($choices);
}

这种方法的工作方式是搜索[%...%]并捕获其间的内容。它作为$matches[1]传递给回调(因为它是第一个捕获的组)。该群组使用explode()|上拆分,并使用array_rand()返回随机群组,