用于查找由冒号分隔的键值对的正则表达式

时间:2010-12-15 12:01:50

标签: regex

我在给出给定形式的字符串的正则表达式时遇到了麻烦:

123123<key:value><key:value>,21313<key:value><key:value>

其中键:值对是可选的,但我们不能在同一个键中有两个冒号:值对。

我已经走到这一步了:

^((\d+)(<(.+?):(.+?)>)*)(,\d+)(<(.+?):(.+?)>)*$

一些有效的文本:

  • 123131
  • 123131, 123131, 1213313
  • 12313<key:value>
  • 232133<key:value><key:value>,232133<key:value><key:value>

3 个答案:

答案 0 :(得分:2)

试试这个:

^((\d+)(<(.+?):(.+?)>){0,2})(,\s*((\d+)(<(.+?):(.+?)>){0,2}))*$

根据您不想捕获的群组,您可以将( )更改为(?: )

Rubular link

答案 1 :(得分:1)

尝试使用此^(\d+(<.+:.+>){1,2})(,\d+(<.+:.+>){1,2})*$希望它有所帮助

答案 2 :(得分:0)

非常感谢您的回复,但他们似乎都没有完全按照我的意愿行事。我想也许简单的事情就是遵循OrangeDogs的建议考虑可维护性......