1

我正在处理一个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.*块中具有目标条目的所有记录。

4

2 回答 2

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

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

根据您使用的软件,您可以使用此正则表达式进行细微更改,“->”表示“返回”。

于 2012-07-19T20:52:49.640 回答
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]';
于 2012-07-19T21:21:48.533 回答