【问题标题】:How do I use the non-greedy modifier when searching backwards?向后搜索时如何使用非贪婪修饰符?
【发布时间】:2013-05-03 15:14:12
【问题描述】:

我有一些疑问,例如:

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

【问题讨论】:

  • 你能举一个输入和期望输出的例子吗?
  • @melwil 我更新了问题,谢谢。
  • 仅供参考 - rubular.com 是一个方便的正则表达式工具

标签: ruby regex non-greedy


【解决方案1】:

假设您的输入是这样的:

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

然后,此正则表达式将返回您的查询,其中包含 LIMIT 之后的任何文本,直到但不包括第一个 "

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

【讨论】:

  • 我已根据您的新输入/输出更新了答案中的正则表达式
【解决方案2】:

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

搜索

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

然后什么都不替换。

【讨论】:

    猜你喜欢
    • 2020-01-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-25
    • 1970-01-01
    • 2014-03-30
    • 2011-05-15
    • 1970-01-01
    相关资源
    最近更新 更多