使用正则表达式解析标记

时间:2013-07-18 22:22:17

标签: c# regex

我正在尝试提供一个正则表达式,它允许我解析冒号分隔的标记,格式化为键和值对。

[/foo:bar] // where [key:value]

棘手的部分是令牌值可以包含另一个令牌。

[/foo:[/foo:bar]]

在上面的例子中,我希望将foo作为键,将[/ foo:bar]作为值。以下表达式有效:

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

但是,当字符串有多个标记时,这不起作用。例如:

[/foo:[/foo:bar]][/foo:bar] // results in foo and [/GetPath:[/GetPath:]]][/foo:bar

我想我只是略微偏离,但我不能,因为我的生活,弄清楚我错过了什么。

1 个答案:

答案 0 :(得分:0)

此正则表达式将name与嵌套值匹配:

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

更改是添加前瞻,在分隔右方括号后断言字符必须是输入的新术语或结尾。

根据此live demo on rubular,使用输入

[/foo:[/foo:bar]][/foo:bar]

结果匹配是:

Match 1...
Group 1:    foo
Group 2:    [/foo:bar]
Match 2...
Group 1:    foo
Group 2:    bar