我们现在正在解决我们的解析器问题。我们保存所有日志,无需解析。
我需要搜索所有日常日志,并查看我们通过端口获取IP地址的次数。
例如:123.123.123.231:45771
问题是从一个请求到另一个请求(在IP地址和端口号中)的位数不同。
我该如何编写查询,以便能够以这种方式过滤它?
答案 0 :(得分:3)
我会使用正则表达式(RegEx)来查找IP地址。看看这些例子:
我自己没有使用Google Bigquery,我会鼓励您查看这个问题BigQuery REGEXP_MATCH and accents : boundary wildcard fails?以获取更多帮助。
答案 1 :(得分:2)
检查一下......我包含了对IP本身的有效性检查
SELECT Regexp_extract(TXT,r'(\d+\.\d+\.\d+\.\d+)') as IP,
Regexp_extract(TXT,r'\d+\.\d+\.\d+\.\d+\:(\d+)') as Port,
Regexp_Match(TXT,r'(\d+\.\d+\.\d+\.\d+\:\d+)') as IP_ContainsPort,
Parse_IP(Regexp_extract(TXT,r'(\d+\.\d+\.\d+\.\d+)')) as IsValidIP,
if(Parse_IP(Regexp_extract(TXT,r'(\d+\.\d+\.\d+\.\d+)')) is null,string(null), Regexp_extract(TXT,r'\d+\.\d+\.\d+\.\d+\:(\d+)')) as PortOfValidIP
FROM
(Select "123.123.123.231:45771" as TXT),
(Select "1.1.1.1" as TXT),
(Select "23.0.0.1:45" as TXT),
(Select "456.456.456.456:45771" as TXT),
答案 2 :(得分:-1)
您可以使用此模式
^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(:[0-9]{1,4})?$