Обновление: После просмотра проблемы, которую вы пытаетесь решить, я бы предложил не использовать регулярные выражения.
Используется в запросе PostGreSQL. Мне нужно отсортировать по трем частям. Что-то вроде:
ORDER BY
substring(plannr from '^[0-9]*')::integer,
substring(plannr from '\.[0-9][0-9]\.')::interger,
substring(plannr from '[0-9]*$')::integer
Вместо регулярного выражения вы можете использовать, например, split_part
:
SELECT plannr
FROM table1
ORDER BY
split_part(plannr, '.', 1)::integer,
split_part(plannr, '.', 2)::integer,
split_part(plannr, '.', 3)::integer;
Результат:
"2.2.3"
"2.10.3"
"2.10.20"
"10.1.4"
"630.81.11"
Данные испытаний:
CREATE TABLE table1 (plannr VARCHAR(100) NOT NULL);
INSERT INTO table1 (plannr) VALUES
('630.81.11'),
('2.2.3'),
('2.10.3'),
('2.10.20'),
('10.1.4');
Оригинальный ответ: Если ваш движок регулярных выражений включает в себя заглядывания фиксированной длины и заглядывания назад, вы можете сделать следующее:
(?<=\.)[0-9]+(?=\.)