我正在处理一个名为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]';