簡體   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