捕获不受约束的重复模式

时间:2012-09-29 21:08:08

标签: php

我希望能够查看字符串并查找所有出现的模式。如果您知道要发生多少次模式,那么使用preg_match很容易做到这一点但是当我不知道出现次数时我无法找到使其工作的方法。

以下是已知事件集的工作查询示例:

$pattern = '/\[VAR:(.*)\].*\[VAR:(.*)\].*\[VAR:(.*)\].*\[VAR:(.*)\]/';
$string = "[VAR:one] once apon a time [VAR:two]. And then there was the time that [VAR:three] went to [VAR:four]";
preg_match ( $pattern , $string, $matches );

print_r ( $matches );

这将返回您期望的结果:

[0] => [VAR:one] once apon a time [VAR:two]. And then there was the time that [VAR:three] went to [VAR:four]
[1] => one
[2] => two
[3] => three
[4] => four

我尝试使用模式(使用和不使用PREG_OFFSET_CAPTURE参数) preg_match preg_match_all 的变化失败:

$pattern = '/\[VAR:(.*)\]/';

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

它适用于我,具有以下模式和preg_match_all

$pattern = "/\[VAR:(.*?)\]/";

有关修改后的示例,请参阅http://ideone.com/lGsHl

?之后的.*使其变得非贪婪。