【问题标题】:SQL substring non greedy regexSQL 子字符串非贪婪正则表达式
【发布时间】:2015-04-21 20:11:08
【问题描述】:

我有类似的数据

http://www.linz.at/politik_verwaltung/32386.asp

存储在文本列中。我认为用

进行非贪婪提取
select substring(turl from '\..*?$') as ext from tdata

会给我 .asp 但它仍然是 ?greedely 结果

 .linz.at/politik_verwaltung/32386.asp

我怎样才能只匹配点.的最后一次出现?
使用 Postgresql 9.3

【问题讨论】:

  • 您能提供预期的输出示例吗?
  • .asp 是你所期望的正确
  • 抱歉不准确,是的,.asp 是我所期望的

标签: sql regex postgresql substring


【解决方案1】:

试试这个:

\.[\w]*$

这是它的工作原理:

所有word 字符(\w),其中任意数量的*,介于dot\.)和end of the string$)之间,最后一个.自己。

注意:更新了答案,现在将捕获以. 结尾的字符串。

【讨论】:

    【解决方案2】:

    \.[^.]*$ 匹配 . 后跟任意数量的非点字符后跟字符串结尾:

    # select substring('http://www.linz.at/politik_verwaltung/32386.asp' 
      from '\.[^.]*$');
     substring 
    -----------
     .asp
    (1 row)
    

    至于为什么非贪婪量词在这里不起作用是因为它们仍然尽快开始匹配,同时仍然尝试从那里尽可能短地匹配。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-05
      • 2011-04-27
      • 2010-10-20
      • 2013-02-15
      • 1970-01-01
      相关资源
      最近更新 更多