2013-05-03 36 views
0

我有這樣一些疑問:向後搜索時,如何使用非貪婪修飾符?

"$Prefex" SELECT column_name(s) FROM table_name WHERE pal pal pal LIMIT "$Suffix" 

這些查詢有不必要的前綴和後綴。我使用正則表達式來使用非貪婪的.*?SELECT擺脫前綴。

我無法找到一種方法來使用非貪婪修飾符向後搜索來消除後綴。

理想情況下,我希望有一種模式可以消除從行尾到「LIMIT」的第一個匹配。 如果我使用LIMIT.*?它不能匹配任何東西,而如果我只使用LIMIT.*它是貪婪的,我想避免。

我爲我的語言使用Ruby。

這是例如查詢:

SELECT DISTINCT $val1 $val2 WHERE { $val1 a foaf:val1.$val1 foaf:val2 $val2. FILTER regex($val2 , "CITY LIMITED" , "i")} LIMIT 20&output=xml HTTP/1.1" 200 604 "-" "Python-urllib/2.6" "GB" "65465666654626426246524" 

這是所需的輸出:

SELECT DISTINCT $val1 $val2 WHERE { $val1 a foaf:val1.$val1 foaf:val2 $val2. FILTER regex($val2 , "CITY LIMITED" , "i")} 
+0

你能舉一個輸入和期望輸出的例子嗎? – melwil 2013-05-03 15:17:47

+0

@melwil我更新了這個問題,謝謝。 – EurikaIam 2013-05-03 15:44:52

+0

僅供參考 - rubular.com是一個正則表達式的工具 – HM1 2013-05-03 16:56:01

回答

0

假設你的輸入是這樣的:

"$Prefex" SELECT column_name(s) FROM table_name WHERE pal pal pal LIMIT "$Suffix" 

然後這個表達式將返回您的任何文字在LIMIT後面的查詢,最多不包括第一個"

/(SELECT.*?LIMIT.*?\}).*?/ 
+0

我已經更新了基於你的新輸入/輸出的答案中的正則表達式 – fullybaked 2013-05-03 16:14:49

0

理想情況下,我希望有一個圖案,以從行到「限制」的 第一個匹配的末端消除。

搜索

/LIMIT((?!LIMIT).)*$/ 

,並沒有更換。