在this answer上构建我想到使用PostgreSQL的regexp_replace
函数和to_char
来创建PHP,SQL-fed表有一列数字被集中,但是右对齐。
在HTML前端,该列已经是集中的,但这使得长度不同的数字不会相互对齐。关于该答案的想法是使所有数字具有相同的长度,以空格引导,以使它们与右边对齐。
我尝试了regexp_replace(to_char(field,'FM000,000,000'),$$^(0{1,3},?)+$$,' ')
,但这会使左侧的每个0
以及分组,
被单个HTML  
取代
有人可以建议将每个0
更改为 
吗?我非常确定相同的解决方案可以应用于另一个regexp_replace
,因此我可以替换任何"左分组,
"进入 
。
答案 0 :(得分:1)
试试这个:
regexp_replace(to_char(field,'FM000,000,000'),$$(?<=^[0,]*)0$$,' ','g')
它使用正向lookbehind((?<=^[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'))