在两者之间用字符串匹配两个东西

时间:2015-03-13 09:40:50

标签: php regex match

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

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

// Returns: [0] => items

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

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

如何修改正则表达式以匹配“item”和“items”并排除“for”和“in”部分?

我知道我可以这样做:

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

但是我喜欢我的原始正则表达式,因为它只返回匹配的部分,所以我想帮助修改它以支持这个例子。

提前致谢!

编辑: {{for item in items}}并不总是{{for piece in products}}或{{for part in junk}}

1 个答案:

答案 0 :(得分:1)

我认为您的输入格式与上面完全相同。

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

\K使文本与整个正则表达式匹配保持匹配。 (?=...)称为积极的先行断言。

DEMO