这是我的哈希:
---
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's
id: 11259
id: 82829
(2)提取最后的'id':
id: 82829
到目前为止,我只能提取第一个 ID:
REGEXP_SUBSTR(hash_name, "id: .*?\n")
感谢。
答案 0 :(得分:1)
如果您使用的是使用PCRE的MariaDB版本,则可以使用否定前瞻功能在匹配后排除id:
。
REGEXP_SUBSTR(hash_name, '(?s)id:[^\n]+(?!.*id:)')
(?s)
将其置于DOTALL
模式,以便.*
匹配换行符。 (?!.*id:)
是一个负面的预测,如果后面跟包含id:
的任何内容,就会禁止匹配。 id:[^\n]*
匹配id:
,后跟可选的任何内容,直到换行符。
答案 1 :(得分:0)
试试这个提供perl正则表达式访问权限的user defined function:
PREG_CAPTURE(pattern, subject [, capture-group] [, occurence])
修改强>
PREG_CAPTURE("(?s)id:[^\n]+(?!.*id:)", hash_name)