【发布时间】:2016-07-18 13:20:09
【问题描述】:
假设我有:
$line = "{This is my {sentence|words} I wrote.}"
输出:
This is my sentence I wrote.
This is my words I wrote.
但是,正则表达式应该匹配深层和嵌套值并拆分这些值,例如:
$line = "{This is my {sentence|words} I wrote on a {sunny|cold} day.}";
输出:
This is my sentence I wrote on a sunny day.
This is my sentence I wrote on a cold day.
This is my words I wrote on a sunny day.
This is my words I wrote on a cold day.
我的第一个方法是在下面的代码中爆炸,但结果不合适:
$res = explode("|", $line);
建议?谢谢。
编辑:以下几行:
$line = "{This is my {sentence|words} I wrote on a {sunny|cold} day.}";
$regex = "{[^{}]*}";
$match = [];
preg_match($regex, $line, $match);
var_dump($match);
如前所述,它可以无限,所以没有限制,适合 for 循环。
【问题讨论】:
-
我认为您可以创建一个函数,替换
/{[^{}]*}/的第一个匹配项并返回匹配项及其索引...然后,虽然返回不是 -1 ,你不断地爆炸|...当然你需要一个数组来推送每个新的sentence(由插入到函数返回的索引中的一个爆炸值组成) -
$res = explode("|", $line, 2);
-
我猜嵌套层数可以是任意的,对吧?喜欢
$line = "{This is my {sentence|words} I wrote on a {{very|not so} sunny|{freezing|rather} cold} day.}"; -
@WiktorStribiżew 确实。