我正在努力使用正则表达式匹配来分离键和值。
要求是分隔符是':',但键可以有多个“::”。值可以有':',但键不能。所以第一个':'应该是分隔符。如果值之前有空格,则应将其删除。
我有以下正则表达式,但它没有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并添加另一个正则表达式,但我想知道我是否可以为整个事情设置一个正则表达式。
谢谢,
答案 0 :(得分:4)
/^((?:[^:]+::)*[^:]+):(?!:)\s*(.*)$/
答案 1 :(得分:1)
您可以使用此模式:
/^((?>[^:]+|::)+):\s*(.*)$/