perl正则表达式匹配单个字符分隔符

时间:2013-12-12 02:08:25

标签: regex perl

我正在努力使用正则表达式匹配来分离键和值。

要求是分隔符是':',但键可以有多个“::”。值可以有':',但键不能。所以第一个':'应该是分隔符。如果值之前有空格,则应将其删除。

我有以下正则表达式,但它没有key:value,(':'之后没有空格。)

if ($_ =~ /^(.+?):\s+(.*)$/)
{
  $data{$1} = $2;
}

有效密钥值为:

key:value
key: value
key: value::subvalue
key::subkey:value
key::subkey:value:subvalue
key::subkey: value:subvalue
key::subkey::subsubkey:value

请注意,键,子键,值,子值可以替换为任何单词。 除了第一个,我的正则表达式适用于所有人。

有什么想法吗?

我可以有一个elsif并添加另一个正则表达式,但我想知道我是否可以为整个事情设置一个正则表达式。

谢谢,

2 个答案:

答案 0 :(得分:4)

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

DEMO

答案 1 :(得分:1)

您可以使用此模式:

/^((?>[^:]+|::)+):\s*(.*)$/