2014-02-07 59 views
0

我有一個數據庫查詢,看起來像這樣正則表達式非捕獲括號問題

select * from students join (select * from teachers) join (select * from workers 

我有一個要求來標記基於「選擇」這個字符串。 我正在嘗試使用正則表達式(select)(.*?)((?:select)|$),它只匹配2次。 請求一些關於如何實現這一點的指針。

我需要3個輸出記號如下

  • select * from students join (
  • select * from teachers) join (
  • select * from workers
+0

結果標記的外觀應該如何? –

+0

預期結果是什麼?請將其添加到您的帖子。 –

+0

在'(?:select)'中,非捕獲括號是無用的......可能是'(select)'中的括號。你爲什麼把它們放在這裏? – Robin

回答

2

我認爲這正則表達式將工作:

select.*?(?=select|$) 

正則表達式字select,那麼任何文本相匹配(不包括新線)直到下一個select或字符串的末尾。

此處示範:http://regex101.com/r/sR3gV1

+0

不錯!如果你選擇。*?一個捕獲組,你可以看到這三個標記:http://regex101.com/r/uZ8dP9 – jonas

+0

@jonas這真的取決於如何實現正則表達式。鑑於什麼是Sushant已經,我不'我認爲捕捉小組是必要的。 –

+0

絕對正確,它們不是必需的,但在regex101中結果更好可見...;) – jonas

0

如果你試圖解析字符串中的SELECT查詢,那麼你可以使用這個正則表達式。假設你是不是做選擇從多個表(即不這樣做select * from x,y,z

(select.*?from\\s+\\w+)