我已经制作了自己的语法,它适用于这样的事情:
$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 使文本匹配到整个正则表达式匹配之外。 (?=...)
称之为积极的前瞻性断言。
演示