我想这是我要找的一种奇怪的东西。
我有以下文本字符串:
$string = "The compass is pointing <north|south|east|west> towards <London|Paris|Rome>";不知何故,我想解析它以获得以下任何输出:
对于文本字符串中的每一组<>,我需要将内容转换为数组(使用explode("|",$string)?),然后在该数组上运行array_rand以获取我们将显示的选项的键,然后读取数组并返回该值。
问题是,我几乎没有文本解析的经验,但我猜您会在这类问题中使用preg_replace。
如果有人能帮我开始工作,我会很感激的。
发布于 2012-08-05 23:59:35
您可以使用preg_replace_callback()来执行选择随机替换的函数。
$string = "The compass is pointing <north|south|east|west> towards <London|Paris|Rome>";
$callback = function ($match) {
$opts = explode('|', $match[1]);
return $opts[array_rand($opts)];
};
echo preg_replace_callback('/<(.+?)>/', $callback, $string);http://codepad.viper-7.com/dMG1Yp
该模式与<、any (.+)和>匹配。“懒惰”量词 ?在找到最短匹配时使+停止,而不是“贪婪”地寻找最长的匹配(这是默认行为)。如果没有它,它将一直匹配到最后一个>,这太远了。
( )创建一个子模式,因此虽然$match[0]将是整个模式(包括< >)所匹配的,但$match[1]将只包含子模式(没有< >)。
每次找到匹配时都会调用回调函数,它完全按照您所描述的那样做-- explode()选项列表并返回一个随机选项。然后返回值替换原来的匹配。
https://stackoverflow.com/questions/11821095
复制相似问题