您好我试图在'之前提取所有数字(包括小数)。使用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使用在线测试人员,因为这并不能解释我的查询所需的报价。
答案 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
如果您确实有倒置逗号,请使用
SELECT regexp_matches(long_text, '([+-]?(?:[0-9]+(?:[.][0-9]*)?|[.][0-9]+))’', 'g') as substring_feet