正则表达式找到2个相同字符串之间的内容

时间:2014-01-22 05:30:05

标签: php regex preg-match-all

Name: value
variable: value

variable2: value
variable3: value

Name: value
variable: value

variable2: value
variable3: value

间距是有意的。我试图抓住从第一个“名称”的开头到下一个“名称”标签之前的最后一个值的结尾的所有内容。我一直在尝试使用正则表达式甚至是用空行预分割,但正如你所看到的那样,它会减少一半所需数据。这些数据集的范围可以从1集到无限量集。

我的最后一次尝试看起来像这样:

preg_match_all("/Name:(.*?)variable3:(.*?)$/s", $input_lines, $output_array); 

我们非常感谢任何建议。提前谢谢!

2 个答案:

答案 0 :(得分:2)

以负面展望尝试:

/Name:((?:.(?!Name:))*)/s

Expl。:查找“名称:”并从中捕获所有字符,直到找到一个后跟“名称:”。

regex101 example

我不确定你是否想要捕获这个名字,但我想你可以从中解决这个问题。

此致

答案 1 :(得分:0)

preg_match_all("/Name:(.*)Name:/si", $data, $matches);
print_r($matches);

我认为你的正则表达式中没有使用“s”(。*包括换行符)。

欢迎任何进一步的改进/帮助。