簡體   English   中英

正則表達式匹配括號內的文本*不*

[英]Regex that matches text *not* between brackets

我正在尋找一個正則表達式,該正則表達式將以PHP(PCRE)兼容模式匹配下面的所有粗體文本,這只是一個需要匹配的示例查詢,因此它不能太具體以至於無法使用在其他類似的查詢上。

選擇a。*,(從table1中選擇count(*)作為t1,(從table2中選擇count(*))作為t2,(從table3中選擇count(*))作為t3,col1,來自table4的col2作為LEFT JOIN (從表5中選擇g2。*,g1.id)作為g ON(a.id = g.id));

更新:我的想法是將“ FROM”一詞與任何方括號和之前的所有內容都不匹配。 最終目標是將所有粗體文本替換為數據庫抽象層的“ COUNT( )”。

如果您的問題是“我如何使用正則表達式來查找在SQL查詢的頂層選擇的表達式”,則簡短的答案是,您不能。

SQL 不是一種“常規語言”(不允許嵌套任何括號的語言),因此您就被限制在那里。 我認為這是上下文相關的語法,因此您需要單獨的詞法分析器和解析器。

您不需要正則表達式來解決此問題。

只需遍歷所有字符並跟蹤嵌套級別即可。 當您檢測到左括號時,將嵌套級別增加1。當您檢測到右括號時,將嵌套級別減少1。每當找到單詞“ from”時,如果嵌套級別為0,則標記位置(然后返回從一開始到該位置的子字符串),否則忽略它並繼續前進。

在無效查詢的情況下,這將是脆弱的,但是如果已知該查詢是有效的,它應該可以工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM