繁体   English   中英

从字符串中提取子字符串的最后一个实例

[英]Extract last instance of substring from string

这是我的哈希:

---
0:
  id: 11259
  year: 1997
  status: other
  priority: 
  created_at: !ruby/object:ActiveSupport::TimeWithZone
    utc: 2017-01-13 15:02:22.000000000 Z
    zone: !ruby/object:ActiveSupport::TimeZone
      name: Etc/UTC
    time: 2017-01-13 15:02:22.000000000 Z
  updated_at: !ruby/object:ActiveSupport::TimeWithZone
    utc: 2017-01-13 15:02:22.000000000 Z
    zone: !ruby/object:ActiveSupport::TimeZone
      name: Etc/UTC
    time: 2017-01-13 15:02:22.000000000 Z
1:
  id: 82829
  year: 1931
  status: won
  priority: 
  created_at: !ruby/object:ActiveSupport::TimeWithZone
    utc: 2017-01-13 15:02:22.000000000 Z
    zone: !ruby/object:ActiveSupport::TimeZone
      name: Etc/UTC
    time: 2017-01-13 15:02:22.000000000 Z
  updated_at: !ruby/object:ActiveSupport::TimeWithZone
    utc: 2017-01-13 15:02:22.000000000 Z
    zone: !ruby/object:ActiveSupport::TimeZone
      name: Etc/UTC
    time: 2017-01-13 15:02:22.000000000 Z

我想做两件事之一:

(1)提取两个“ id”

id: 11259
id: 82829

(2)仅提取最终的“ id”:

id: 82829

到目前为止,我只能提取第一个 ID:

REGEXP_SUBSTR(hash_name, "id: .*?\n")

谢谢。

如果您使用的是使用PCRE的MariaDB版本,则可以在匹配之后使用否定前瞻排除id:

REGEXP_SUBSTR(hash_name, '(?s)id:[^\n]+(?!.*id:)')

(?s)将其置于DOTALL模式,以便.*跨换行符匹配。 (?!.*id:)是一个否定的超前行为,如果后面跟着包含id:任何内容,则不允许匹配。 id:[^\\n]*id:匹配,后跟可选的任何字符,直到换行符为止。

DEMO

尝试使用此用户定义的函数来访问perl regex:

PREG_CAPTURE(pattern, subject [, capture-group] [, occurence])

编辑:

PREG_CAPTURE("(?s)id:[^\n]+(?!.*id:)", hash_name)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM