向后搜索时如何使用非贪婪修饰符?

时间:2013-05-03 15:14:13

标签: ruby regex non-greedy

我有一些问题,如:

"$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")}

2 个答案:

答案 0 :(得分:0)

假设您输入的内容如下:

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

然后此正则表达式将使用LIMIT之后的任何文本返回您的查询,最多不包括第一个"

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

答案 1 :(得分:0)

  

理想情况下,我想要一个模式从行的末尾消除到   “LIMIT”的第一场比赛。

搜索

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

并替换为零。