【发布时间】:2015-07-26 00:14:45
【问题描述】:
我想使用regexp_matches() 拆分可能包含数值的给定字符串。它应该标识包含可选符号和可选小数位的数值的第一次出现。不匹配的部分也应该返回 - 数组的第一个和最后一个位置。
一些示例输入和预期输出值:
'hello+111123.454545world' -> {hello,+111123.454545,world}
'he-lo+111123.454545world' -> {he-lo,+111123.454545,world}
'hel123.5lo+111123.454545world' -> {hel,123.5,lo+111123.454545world}
'hello+111123.454545world' -> {hello,+111123.454545,world}
'hello+111123.454545world' -> {hello,+111123.454545,world}
'1111.15' -> {"",1111.15,""}
'-.234' -> {"",-.234,""}
'hello-.234' -> {hello,-.234,""}
我在以下由“TODO”表示的表达式中的匹配组的第一部分遇到问题。它应该匹配任何不能被识别为数值的东西。
select regexp_matches('input', '(TODO)((?:\+|-)?(?:\d*(?:(?:\.)?\d+)))(.*)')
'(TODO)' 表示的匹配组需要是第二个匹配组中正则表达式的否定。 (因为需要返回结果)。匹配数值的正则表达式工作正常,我需要的是如何匹配不是数值的字符串的第一部分。
【问题讨论】:
-
有一个错误!如果您将第一组更改为非贪婪,则第三组也将变为非贪婪,这是错误的(以及您可能需要锚点的原因)!如果这确实是一个 postgres 问题,而不仅仅是 SQL fiddle,则应该报告它。
标签: regex postgresql pattern-matching