【问题标题】:Regex to parse a command string正则表达式解析命令字符串
【发布时间】:2015-03-14 17:08:51
【问题描述】:

String 解析为java.util.Map 的正则表达式是什么,其中字符串具有如下定义的格式:

message_type={any_text}&message_number={digits}&code={digits}&id={digits}&message={any_text}&timestamp={digits_with_decimal}

目标是生成一个包含 message_type、message_number、code、id、message 和 timestamp 键的 Map。

这是正则表达式可以解析的东西吗?或者这需要一个有语法的解析器?

更新:

这不是同一个 URI 解析问题。这里的消息是一个正文字符串,因此可能在消息部分中包含“&”。使用带有 '&' 的相同拆分可能会导致错误拆分。

另外,{ } 只是需要被正则表达式替换的理想函数。

【问题讨论】:

  • 你不能使用标准库来解析查询字符串吗?
  • 我对拆分的担忧是消息部分可能包含字符“&”导致它也在那里拆分,这不是所需的输出
  • 你应该写更多关于你想要解析的数据。可以有换行吗?输入可以包含多个message_type 元素吗?
  • 格式已定义,没有重复键

标签: java regex parsing


【解决方案1】:

我认为关键是使用惰性评估,以下应该可以解决问题:

([a-zA-Z].*?={.*?})

从一个字母(小写或大写)开始,直到第一次出现“=”,然后获取包含大括号的值并重复。

演示: https://regex101.com/r/iE0hU3/1

【讨论】:

  • 但是消息中没有实际的花括号,这只是想法
猜你喜欢
  • 1970-01-01
  • 2016-04-29
  • 2012-08-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多