【发布时间】:2017-07-19 09:47:10
【问题描述】:
我需要一个始终匹配 (!) 正则表达式来提取 Postgresql 中的数据(使用 regexp_matches)。
这是一个示例输入:
#link showcatalog=123 text=blurb
还有我的正则表达式:
/(?:showcatalog=([0-9]+))?/
我用 Perl 试过这个:
perl -e 'use Data::Dumper; print Dumper([ "#link showcatalog=123 text=blurb" =~ /(?:showcatalog=([0-9]+))?/ ]);'
并期待$VAR1 = [ 123 ],但得到了$VAR1 = [ undef ]。我不明白,因为'?是贪婪的,它的行为不是这样的。我不明白什么?我试过 regex101.com 这对我没有帮助。如何得到预期的结果?
不应该优先匹配文本,贪心吗?
如果没有,就去匹配,比如在
#link text=blurb"
我只想得到$VAR1 = [ undef ]
【问题讨论】:
-
你能为你的正则表达式提供一些输入数据吗?
-
@JohnDoe:输入是“#link showcatalog=123 text=blurb”。如果匹配,则预期输出为“[ match ]”,否则为“[ undef ]”。
-
所以你真正的问题是关于 postgresql 中的
select regexp_matches('#link showcatalog=123 text=blurb', '(?:showcatalog=([0-9]+))?');,对吧?我认为所有这些 perl 东西并没有使问题更清楚。 -
为什么你添加了这个
??这意味着如果该组不在这里,它也匹配。你能解释一下真正的目标吗? -
@sidyll:随意!
标签: regex perl pcre regex-greedy