正则表达式多次匹配多行

时间:2012-05-11 13:43:23

标签: php regex

我有一个这样的字符串:

Name: John Doe

Age: 23

Primary Language: English

Description: This is a multiline
description field that I want 
to capture

Country: Canada

这不是实际数据,但你可以看到我正在尝试做什么。我想使用正则表达式来获取“关键”字段(名称,年龄,主要语言,描述,国家)及其值的数组。

我正在使用PHP。

我目前的尝试是这样,但它不起作用:

preg_match( '/^(.*?\:) (.*?)(\n.*?\:)/ism', $text, $matches );

2 个答案:

答案 0 :(得分:1)

以下是一个解决方案:http://rubular.com/r/uDgXcIvhac

    \s*([^:]+?)\s*:\s*(.*(?:\s*(?!.*:).*)*)\s*

请注意,我使用了负前瞻断言(?!.*:)。这是您可以检查下一行看起来像新字段的唯一方法,同时继续您离开的位置。 (这就是为什么前瞻和后瞻被称为零宽度断言。)

编辑:删除任意宽度前瞻;我误解了。上面的解决方案很好。

答案 1 :(得分:0)

PHP strtok会帮助你吗?您可以使用“:”作为分隔符/标记,并修剪前导和尾随空格以删除不需要的新行。

http://php.net/manual/en/function.strtok.php