用表达式中的一项替换花括号表达式

Posted

技术标签:

【中文标题】用表达式中的一项替换花括号表达式【英文标题】:Replace curly braced expression with one item from the expression 【发布时间】:2021-02-02 14:28:04 【问题描述】:

这是一个示例字符串:

three / fifteen / one hundred this is the first random number, and this is the second, two / four

在括号中,我需要返回一个随机值,例如:

One hundred is the first random number, and this is the second, two

我的代码:

function RandElement($str) 
    preg_match_all('/([^]+)/', $str, $matches);
    return print_r($matches[0]);

$str = "three/fifteen/one hundred this is the first random number, and this is the second, two/four";
RandElement($str);

结果:

(
    [0] => three/fifteen/one hundred
    [1] => two/four
)

而且我不太明白下一步该做什么。从数组中取出第一个字符串并通过正则表达式将其传回?

【问题讨论】:

查看preg_replace_callback 相关:***.com/q/42816112/2943403 【参考方案1】:

你可以使用preg_replace_callback:

$str = "three/fifteen/one hundred this is the first random number, and this is the second, two/four";
echo preg_replace_callback('~\([^]*)~', function ($x) 
    return array_rand(array_flip(explode('/', $x[1])));
, $str);

php demo

请注意,使用 ([^]*) 模式捕获的第 1 组(并通过 $x[1] 访问)使用 explode('/', $x[1]) 以斜线分割,然后使用 array_rand 获取随机值。直接返回值,数组为array_flipped。

【讨论】:

以上是关于用表达式中的一项替换花括号表达式的主要内容,如果未能解决你的问题,请参考以下文章

怎么用正则表达式匹配小括号里内容(含括号)?

C#正则表达式指定替换

正则表达式在非常大的html文件中匹配java中的花括号[重复]

涉及花括号的正则表达式不起作用,而对于方括号则有效

js正则表达式替换捕获内容

js的eval()函数及其java实现(计算数学表达式)