【发布时间】:2011-04-05 09:24:25
【问题描述】:
输入是表示元素列表的字符串。
列表被定义为一个开放的大花 { 后跟 0 个或多个以空格分隔的元素,后跟一个封闭的大花 }。
一个元素要么是一个字面量,要么是一个元素列表。
文字是一系列非空白字符。如果元素包含大括号,则必须使用反斜杠对其进行转义:\{ 和 \}。 (或者,为了简单起见,您可以假设文字中不允许使用花括号)
例子:
"{abc { def ghi } 7 { 1 {2} {3 4} } {5 6} x\{yz \}foo }"
文字中没有花括号:
"{abc { def ghi } 7 { 1 {2} {3 4} } {5 6} xyz foo }"
(这是 Tcl 列表的简化定义。)
我想知道的是:输入是否可以使用正则表达式拆分为最外层循环的元素?
预期输出:
abc
{ def ghi }
7
{ 1 {2} {3 4} }
{5 6}
x{yz
}foo
真正的问题是:这可以用正则表达式来完成吗?
我对 .NET 风格最感兴趣,但会接受任何答案。
我将在答案中发布我自己的假设,看看它是否被验证或销毁。
【问题讨论】:
-
为什么
}foo是文字,而4}不是?事实上,}根据您的定义是一个有效的文字。 -
@Kobi 你是对的。我试图得到一个与 Tcl 解释器类似的定义,但它做了一些奇怪的事情。例如,它将允许
set a 3{4,但不允许set a {1 2 3{4 }。闭合卷曲的类似行为。我会更新问题。
标签: .net regex parsing grammar matching