用字符串匹配两个东西


Matching two things with string in between

我已经制作了自己的语法,它适用于这样的事情:

$str = "abc {{for items}} efg";
preg_match('/(?<={{for )[^}]*(?=}})/', $str, $match);
// Returns: [0] => items

但是我想扩展 for 命令以像这样工作:

$str = "abc {{for item in items}} efg";

我需要如何修改正则表达式以匹配"项目"和"项目"并排除"for"和"in"部分?

我知道我可以这样做:

preg_match('/{{for (.*) in (.*)}}/', $str, $match);

但是我喜欢我的原始正则表达式,因为它只返回匹配的部分,所以我希望得到一些帮助来修改它以支持此示例。

提前感谢!

编辑:它并不总是{{对于项目中的项目}},它也可能是{{对于产品中的一块}}或{{对于垃圾中的部分}}

我假设您的输入格式与上面完全相同。

{{for's+'K[^'s}]+(?='s+in's+[^'s}]+}})|[^'s}]+(?=}})

''K 使文本匹配到整个正则表达式匹配之外。 (?=...)称之为积极的前瞻性断言。

演示