0

我有一个这样的字符串:

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 );
4

2 回答 2

1

这是一个解决方案:http ://rubular.com/r/uDgXcIvhac 。

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

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

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

于 2012-05-11T15:29:54.090 回答
0

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

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

于 2012-05-11T13:46:48.110 回答