倒置逗号前的正则数字子串

时间:2018-04-13 09:59:43

标签: regex postgresql

您好我试图在'之前提取所有数字(包括小数)。使用PostgreSQL的角色。

我不确定如何指定这个,因为我的正则表达式包含在这些字符之间。参见:

SUBSTRING(long_text, '[+-]?([0-9]+([.][0-9]*)?|[.][0-9]+)(?=')') as substring_feet

这会导致以下错误:

syntax error at or near "') as substring_feet
            --,SUBSTRING(long_text, (position((substring(long_text FROM '"
LINE 6: ...ng_text, '[+-]?([0-9]+([.][0-9]*)?|[.][0-9]+)(?=')') as subs...
                                                         ^

我尝试了各种逃脱等但无法弄明白。

expression passes ok使用在线测试人员,因为这并不能解释我的查询所需的报价。

1 个答案:

答案 0 :(得分:1)

要提取所有匹配项,您可以使用带有regex_matches标记的g函数,但您还必须确保模式中没有捕获组,将其替换为non-capturing个(即(?:...))。要使用单引号,请加倍(这是常识)。

使用类似

的内容
SELECT regexp_matches(long_text, '[+-]?(?:[0-9]+(?:[.][0-9]*)?|[.][0-9]+)(?='')', 'g') as substring_feet

请注意,如果使用捕获组(即(...))包裹要提取的部分,则可能会消除前瞻:

SELECT regexp_matches(long_text, '([+-]?(?:[0-9]+(?:[.][0-9]*)?|[.][0-9]+))''', 'g') as substring_feet

查看online demo

如果您确实有倒置逗号,请使用

SELECT regexp_matches(long_text, '([+-]?(?:[0-9]+(?:[.][0-9]*)?|[.][0-9]+))’', 'g') as substring_feet

请参阅another online demo