Regex 如何";不包括「;正则表达式模式中的某个片段

Regex 如何";不包括「;正则表达式模式中的某个片段,regex,postgresql,postgresql-9.2,Regex,Postgresql,Postgresql 9.2,给定字符串12.34.56 我需要按点()拆分此字符串,但只能按这些点拆分,前面的字符不是逗号(,) 也就是说,从上面的字符串中,必须是检索结果 12,.34 56 我正在尝试: 选择regexp\u split\u to\u table('12、.34.56',E'[^,]\\\.') 这将返回: 12,.3 56 如我们所见,符号4被删除,原因已被理解:[^,]表示除逗号外的“某个符号”,在本例中,“某个符号”被改为4 问:如何预防?如何不在模式中包含这一部分:[^,]?

给定字符串
12.34.56

我需要按点(
)拆分此字符串,但只能按这些点拆分,前面的字符不是逗号(

也就是说,从上面的字符串中,必须是检索结果

12,.34
56
我正在尝试:

选择regexp\u split\u to\u table('12、.34.56',E'[^,]\\\.')

这将返回:

    12,.3
    56
如我们所见,符号
4
被删除,原因已被理解:
[^,]
表示除逗号外的“某个符号”,在本例中,“某个符号”被改为
4

问:如何预防?如何不在模式中包含这一部分:
[^,]

这称为反向查找断言。不幸的是

您可以通过使用更复杂的查询来解决这个问题。。。正如欧文刚刚发布的,我正在写这篇文章

虽然PostgreSQL的本机regexp实现不支持这一点,但pl/perl支持,因此当您无法找到使用PostgreSQL内置的更简单、更高效的解决方法时,可以使用pl/perl执行更复杂的正则表达式任务。

这称为反向查找断言。不幸的是

您可以通过使用更复杂的查询来解决这个问题。。。正如欧文刚刚发布的,我正在写这篇文章


虽然PostgreSQL的本机regexp实现不支持此功能,但pl/perl支持此功能,因此当无法找到使用PostgreSQL内置的更简单、更高效的解决方案时,可以使用pl/perl执行更复杂的正则表达式任务。

因为Postgres正则表达式不支持此功能,解决方法是用另一个(唯一的)字符组合替换
,.
,然后将其转换回:

SELECT replace(unnest(string_to_array(
               replace('12,.34.56.78,.34', ',.','~^~'), '.')), '~^~', ',.')

我还使用了而不是,因为它显示出更好的伸缩性。

由于Postgres正则表达式不支持这一点,解决方法是用另一个(唯一的)字符组合替换
,。
,然后将其转换回:

SELECT replace(unnest(string_to_array(
               replace('12,.34.56.78,.34', ',.','~^~'), '.')), '~^~', ',.')

我也在使用而不是,因为它显示出更好的伸缩性。

这将是正则表达式:
/(?。但是,我不确定PostgreSQL是否支持它。谢谢回答。这将是正则表达式:
/(?。但是,我不确定PostgreSQL是否支持它。谢谢回答。