Как regex_replace каждый найденный экземпляр? - PullRequest
0 голосов
/ 09 мая 2018

Построение на этом ответе Я думал об использовании функции regexp_replace PostgreSQL вместе с to_char для создания PHP-таблицы, в которой SQL-таблица имеет централизованный столбец чисел, но выровненный по правому краю.

На лицевой стороне HTML столбец уже централизован, но это приводит к тому, что числа разной длины не совпадают друг с другом вправо.Идея этого ответа заключается в том, чтобы все числа имели одинаковую длину, начиная с пробелов, чтобы они были выровнены вправо.

Я дошел до попытки regexp_replace(to_char(field,'FM000,000,000'),$$^(0{1,3},?)+$$,' '), но это приведет кКАЖДЫЙ 0 слева, вместе с группировкой ,, должен быть заменен одним HTML  .

Может кто-нибудь предложить способ изменить каждый 0 на  ?Я почти уверен, что то же самое решение может быть применено к другому regexp_replace, поэтому я могу заменить любую «левую группу ,» на  .

1 Ответ

0 голосов
/ 09 мая 2018

Попробуйте это:

regexp_replace(to_char(field,'FM000,000,000'),$$(?<=^[0,]*)0$$,'&#x2007;','g')

Используется положительный вид сзади ((?<=^[0,]*)), так что совпадают только нули, где перед ними находится последовательность нулей или запятых ([0,]) до начала (^). Вместе с глобальным модификатором ('g', дополнительный аргумент функции regexp_replace() по сравнению с вашим) все такие нули заменяются, так как с глобальным модификатором заменяется не только первое совпадение, но и любое.

Ой, подождите, теперь я не уверен, что вы хотели заменить только нули или запятые тоже? Если это так, используйте это:

regexp_replace(to_char(field,'FM000,000,000'),$$(?<=^[0,]*)[0,]$$,'&#x2007;','g')

Вместо нуля он соответствует нулю или запятой [0,]. Остальное как выше.

Но предпросмотр поддерживается только с версии 9.6 . В качестве обходного пути можно сначала перевернуть строку, сделать эквивалент с lookbehinds (которые поддерживаются в более низких версиях) и вернуть обратно.

Для замены только нулей:

reverse(regexp_replace(reverse(to_char(field,'FM000,000,000')),'0(?=[0,]*$)',reverse('&#x2007;'),'g')),

Для замены нулей и запятых:

reverse(regexp_replace(reverse(to_char(field,'FM000,000,000')),'[0,](?=[0,]*$)',reverse('&#x2007;'),'g'))

См. Пример для SQL Fiddel .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...