正则表达式匹配不在字符串文字内的逗号

时间:2012-07-13 22:54:24

标签: java regex groovy basic

在BASIC中,打印语句如下所示:

100 PRINT "Copyright, Adrian McMenamin","maybe"

哪个应该在第一个语句和第二个语句之间放置一个制表符空格。

我正在为Groovy / Java中的BASIC开发DSL /解释器,需要解析这一行并产生类似的东西:

print "Copyright, Adrian McMenamin", "    ","maybe"

(因为Groovy将逗号解释为仅分离打印函数的参数。)

那么正则表达式会区分不在引号内的逗号和那些(不要担心PRINT或行号等)的逗号?

2 个答案:

答案 0 :(得分:7)

您正在查看正常表达式无法处理的parsinggrammar。通常,您需要对开放或闭括号进行计数,这超出了正则表达式的范围。您可能希望查看解决此问题的解析器,如ANTLR。 这个任务可能只是 overkill ,但我想你必须翻译多种类型的基本语句然后解析器才是你需要的,而不是正则表达式。

答案 1 :(得分:0)

我实现了一个非常简单的解析器,只计算了开放引号(模2)。它适用于BASIC字符串文字的简单规则。 我设计了一个非常漂亮的递归函数,使用正则表达式可以正常工作:

100 PRINT "Copyright, 2012", "Adrian McMenamin"

但是这个失败了:

100 PRINT "Copyright, 2012"

哦,好吧,猜测这只是类似DFA的方案的限制。