我正在处理一个名为ipaddr的表,其中有一个名为destination的列,该列中的条目看起来像varchar并且类型为169.96.88

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

这些都是可能的。我想写一个regex语句,当它只匹配IP的前三个八位字节时,返回true。所以,上面的三个例子都匹配169.96.88.*
如何编写正则表达式,以便我根据特定的ip地址子网在表中选择行?
select * from ipaddr where destination like '%169.96.88%'

也就是说,我要收集在块中有目的地条目的所有记录。

最佳答案

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]';

10-04 18:16