我有一个这样的字符串:
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 );
答案 0 :(得分:1)
以下是一个解决方案:http://rubular.com/r/uDgXcIvhac。
\s*([^:]+?)\s*:\s*(.*(?:\s*(?!.*:).*)*)\s*
请注意,我使用了负前瞻断言(?!.*:)
。这是您可以检查下一行不看起来像新字段的唯一方法,同时继续您离开的位置。 (这就是为什么前瞻和后瞻被称为零宽度断言。)
编辑:删除任意宽度前瞻;我误解了。上面的解决方案很好。
答案 1 :(得分:0)
PHP strtok会帮助你吗?您可以使用“:”作为分隔符/标记,并修剪前导和尾随空格以删除不需要的新行。