繁体   English   中英

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

[英]Regular expression to match a comma not inside a string literal

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

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

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

我正在使用Groovy / Java开发用于BASIC的DSL /解释器,它需要解析此行并产生类似以下内容的内容:

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

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

那么,什么正则表达式可以区分引号内的逗号和引号内的逗号(不用担心PRINT或行号等)?

您正在查看正则表达式无法处理的语法 分析语法 通常,您需要对开括号或闭括号进行计数,这超出了正则表达式的范围。 您可能想看看像ANTLR这样的解析器来解决此问题。 仅执行此任务可能就算过高了 ,但是我想您将不得不转换多种类型的基本语句,然后解析器才是您真正需要的,而不是正则表达式。

我实现了一个非常简单的解析器,该解析器仅计算了开引号(模2)。 给定BASIC字符串文字的简单规则,它就可以工作。 我设计了一个非常漂亮的递归函数,它使用了一个正则表达式,可以在这种形式下正常工作:

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

但这失败了:

100 PRINT "Copyright, 2012"

哦,好吧,这只是DFA类方案的局限。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM