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是否支持它。谢谢回答。