用于从PostgreSQL中的字符串中提取IP地址的正则表达式

时间:2012-07-19 20:46:54

标签: sql regex postgresql pattern-matching ip-address

我正在处理一个名为ipaddr的表,其中包含一个名为destination的列,并且列中的条目看起来像varchar

tunnel://169.96.88.11:80/
url://169.96.88.30
169.96.88.59:443

这些都是可能的。我想编写一个正则表达式语句,当它只匹配IP的前三个八位字节时返回true,仅此而已。因此,上面的所有三个示例都匹配169.96.88

如何编写正则表达式,以便根据特定的ip地址子网选择表中的行?

select * from ipaddr where destination like '%169.96.88%'

也就是说,我想要收集169.96.88.*块中包含目的地条目的所有记录。

2 个答案:

答案 0 :(得分:1)

tunnel://\(\([[:digit:]]\{1,3\}[.]\)\{4\}\):80/ -> \2

此正则表达式提取IP,并将其作为\ 2。

返回

根据您使用的软件,您可以使用此正则表达式进行微小更改' - >'意思是'返回'。

答案 1 :(得分:1)

SELECT *
FROM   ipaddr 
WHERE  destination ~ '(://|^)169\.96\.88\.[0-9]';

模式从字符串的开头或://开始 然后是网络,一个点和至少一个数字。

使用PostgreSQL 9.1.4进行测试。请注意,我使用现在默认的standard_conforming_strings。否则你必须写:

WHERE  destination ~ E'(://|^)169\\.96\\.88\\.[0-9]';