我有以下字符串
Make me {cum|cumm}.... mmmm {Phones|Phone's} {gonna|going to|going}
有一些角色。
大括号内的文本有一个管道符号“|”。表示两个值中的任何一个。
如果我们选择{Phone | Phone's},我想随机选择其中一个,它可以有大于两个或三个值,甚至大括号中的单个值。
所以上面的字符串可以导致以下
之一让我成为...... mmmm手机
让我成为...... mmmm手机即将
让我暨.... mmmm手机
让我成为...... mmmm手机即将
更新
我有一个更长的解决方案
preg_match_all("~\{(.*?)\}~",$string,$matches);
foreach($matches[1] as $match) {
$options = explode("|", $match);
if(count($options) > 0) {
$key = array_rand($options);
$randomValue = $options[$key];
$string = str_replace("{".$match."}", $randomValue, $string);
}
}
return $string;
答案 0 :(得分:3)
使用preg_replace_callback
函数,拆分匹配,并获取结果数组的随机元素
$new = preg_replace_callback('/{([^}]+)}/',
function($i) {
$t = explode('|', $i[1]);
return $t[array_rand($t)]; },
$string);
echo $new;