我正在处理一个名为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.*
块中包含目的地条目的所有记录。
答案 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]';