【问题标题】:Parsing a string with nested brackets解析带有嵌套括号的字符串
【发布时间】:2012-05-03 01:34:50
【问题描述】:

我正在编写一个应用程序来解析一些命令。命令以如下形式给出:

A { B }

我只想要 A 和 B。A 是可选的,但这很容易处理。我遇到的问题是 A 和 B 都可以包含几乎任何字符,包括空格和“{”和“}”。括号也不需要平衡。这可以用正则表达式解析吗?如果没有,您认为可以做的最简单的事情是什么?

例如,给定:

"parsme { foo { "hello" } { "goodbye" } {{{ } { bar { "up" } { "down" } }"

然后:

A = "parseme { foo { "hello" } { "goodbye" } {{{ }" and B = "bar { "up" } { "down" }"

【问题讨论】:

  • 空格和其他字符不太重要,但如果你说括号不需要平衡,你怎么知道B从哪里开始?
  • 我无法理解任何人是如何区分 B 和 A 的!
  • 对不起,我应该说A中的括号不需要平衡。
  • 您可以在 .NET 中使用平衡组,如下所述:marcomilani.it/2012/07/…

标签: regex parsing nested brackets


【解决方案1】:

您不能使用正则表达式来解析任何需要像括号这样的任意嵌套的内容(这是正则表达式的一个公认的限制,在这里稍微搜索一下会有所帮助)。

为此,您需要使用 Antlr 等工具使用上下文无关语法。

【讨论】:

  • +1。好吧,你 can use (Perl) 正则表达式来解析嵌套结构。你是否愿意,取决于...
  • @Li-aungYip: 小心,这可能会吓跑一些人终身编程!
  • @Len:在这种特殊情况下,这就是 tchrist 想要的效果。 ;) 并不是每个字符串处理问题都承认基于正则表达式的解决方案,即使对于那些承认正则表达式解决方案的问题,有时你还是用其他东西会更好。
  • .NET 中的弗朗西斯存在“平衡组”
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-03
  • 2021-11-18
  • 2018-05-14
  • 1970-01-01
相关资源
最近更新 更多