如何 regex_replace 找到每个实例?
How to regex_replace every instance found?
在 this answer 的基础上,我想到使用 PostgreSQL 的 regexp_replace
函数和 to_char
来创建一个 PHP,SQL-fed table有一列数字集中,但右对齐。
在HTML前面,列已经集中了,但这使得不同长度的数字不会在右边相互对齐。该答案的想法是使所有数字具有相同的长度,以空格开头,使它们右对齐。
我尝试了 regexp_replace(to_char(field,'FM000,000,000'),$$^(0{1,3},?)+$$,' ')
,但这将使左侧的每个 0
连同分组 ,
被单个 HTML 替换]  
.
有人可以建议一种将每个 0
更改为  
的方法吗?我很确定可以将相同的解决方案应用于另一个 regexp_replace
因此我可以将任何 "left grouping ,
" 替换为  
.
试试这个:
regexp_replace(to_char(field,'FM000,000,000'),$$(?<=^[0,]*)0$$,' ','g')
它使用正向后视 ((?<=^[0,]*)
),因此只有零匹配,其中从零或逗号 ([0,]
) 到开头 (^
) 的序列是在他们面前。与全局修饰符('g'
,regexp_replace()
函数的额外参数相比你的)所有这些零都被替换,与全局修饰符一样,不仅第一个匹配被替换,而且任何。
哦等等,现在我不确定您是只想替换零还是也替换逗号?如果是这样使用这个:
regexp_replace(to_char(field,'FM000,000,000'),$$(?<=^[0,]*)[0,]$$,' ','g')
它匹配零或逗号 [0,]
,而不是零。其余如上
但仅自 version 9.6 后才支持前瞻。作为一种解决方法,可以先反转字符串,使用 lookbehinds(较低版本支持)执行等效操作并将其反转回来。
仅替换零:
reverse(regexp_replace(reverse(to_char(field,'FM000,000,000')),'0(?=[0,]*$)',reverse(' '),'g')),
用于替换零和逗号:
reverse(regexp_replace(reverse(to_char(field,'FM000,000,000')),'[0,](?=[0,]*$)',reverse(' '),'g'))
在 this answer 的基础上,我想到使用 PostgreSQL 的 regexp_replace
函数和 to_char
来创建一个 PHP,SQL-fed table有一列数字集中,但右对齐。
在HTML前面,列已经集中了,但这使得不同长度的数字不会在右边相互对齐。该答案的想法是使所有数字具有相同的长度,以空格开头,使它们右对齐。
我尝试了 regexp_replace(to_char(field,'FM000,000,000'),$$^(0{1,3},?)+$$,' ')
,但这将使左侧的每个 0
连同分组 ,
被单个 HTML 替换]  
.
有人可以建议一种将每个 0
更改为  
的方法吗?我很确定可以将相同的解决方案应用于另一个 regexp_replace
因此我可以将任何 "left grouping ,
" 替换为  
.
试试这个:
regexp_replace(to_char(field,'FM000,000,000'),$$(?<=^[0,]*)0$$,' ','g')
它使用正向后视 ((?<=^[0,]*)
),因此只有零匹配,其中从零或逗号 ([0,]
) 到开头 (^
) 的序列是在他们面前。与全局修饰符('g'
,regexp_replace()
函数的额外参数相比你的)所有这些零都被替换,与全局修饰符一样,不仅第一个匹配被替换,而且任何。
哦等等,现在我不确定您是只想替换零还是也替换逗号?如果是这样使用这个:
regexp_replace(to_char(field,'FM000,000,000'),$$(?<=^[0,]*)[0,]$$,' ','g')
它匹配零或逗号 [0,]
,而不是零。其余如上
但仅自 version 9.6 后才支持前瞻。作为一种解决方法,可以先反转字符串,使用 lookbehinds(较低版本支持)执行等效操作并将其反转回来。
仅替换零:
reverse(regexp_replace(reverse(to_char(field,'FM000,000,000')),'0(?=[0,]*$)',reverse(' '),'g')),
用于替换零和逗号:
reverse(regexp_replace(reverse(to_char(field,'FM000,000,000')),'[0,](?=[0,]*$)',reverse(' '),'g'))