使用否定字符类(参见 rubular.com):
/^([^:]*):(.*)$/m
是[…]
一个字符类。like[aeiou]
匹配任何一个小写元音。[^…]
是一个否定字符类。[^aeiou]
匹配除小写元音之外的任何一个。
模式开头和结尾处的 and 是行^
锚点的开头和结尾。修饰符打开多行模式。$
m
原始模式的问题在于,.
当您本可以更具体时,您正在(ab)使用,并且由于*
贪婪,第一组被过度匹配。尝试通过使重复不情愿来“解决”这个问题很诱人,但最好更具体一点,并说第一组匹配除:
.
但是请注意,这是一个匹配模式,带有捕获。它实际上不是仅匹配分隔符的拆分模式。分隔符模式真的只是:
.
相关问题
PHP 片段
鉴于这种:
$text = <<<EOT
Company Name: Name of the company, place.
Company Address: Some, address, here.
Link: http://www.somelink.com
EOT;
preg_match_all('/^([^:]*):(.*)$/m', $text, $matches, PREG_SET_ORDER);
print_r($matches);
输出是(如在 ideone.com 上看到的):
Array
(
[0] => Array
(
[0] => Company Name: Name of the company, place.
[1] => Company Name
[2] => Name of the company, place.
)
[1] => Array
(
[0] => Company Address: Some, address, here.
[1] => Company Address
[2] => Some, address, here.
)
[2] => Array
(
[0] => Link: http://www.somelink.com
[1] => Link
[2] => http://www.somelink.com
)
)