使用正则表达式匹配"630.81.11"中的"81"

Mar*_*egh 1 regex

我想在"630.81.11"中匹配"81".我坚持使用\.[0-9]*\.其中包括点.

Mar*_*ers 6

更新:在看到您尝试解决的问题后,我建议不要使用正则表达式.

它用于PostGreSQL查询.我需要按三个部分排序.就像是:

ORDER BY
    substring(plannr from '^[0-9]*')::integer,
    substring(plannr from '\.[0-9][0-9]\.')::interger,
    substring(plannr from '[0-9]*$')::integer
Run Code Online (Sandbox Code Playgroud)

您可以使用例如split_part:而不是使用正则表达式:

SELECT plannr
FROM table1
ORDER BY
    split_part(plannr, '.', 1)::integer,
    split_part(plannr, '.', 2)::integer,
    split_part(plannr, '.', 3)::integer;
Run Code Online (Sandbox Code Playgroud)

结果:

"2.2.3"
"2.10.3"
"2.10.20"
"10.1.4"
"630.81.11"
Run Code Online (Sandbox Code Playgroud)

测试数据:

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');
Run Code Online (Sandbox Code Playgroud)

原始答案:如果您的正则表达式引擎包含固定长度的前瞻和后观,您可以这样做:

(?<=\.)[0-9]+(?=\.)
Run Code Online (Sandbox Code Playgroud)