【发布时间】:2021-07-01 16:17:43
【问题描述】:
请在本文末尾找到虚拟数据和我尝试的解决方案。
我在过去几天开始学习 REGEX,并正在创建一个 REGEX 以从我的数据集中排除任何私有 IP 地址。我的数据集有一列 url,它显示了公司从哪个 IP 地址执行了操作。此列包含url 格式的各种IP 地址。
我创建了一个查询,它应该只输出非本地 IP 地址(这是 URL 的一部分。我的查询如下:
WITH table_1 AS(
SELECT 'http://localhost:9999' AS url UNION ALL
SELECT 'https://localhost:0000' AS url UNION ALL
SELECT 'http://stackoverflow.com/challenge' AS url UNION ALL
SELECT 'https://arseniyaskingquestion.ru/SO' AS url
)
SELECT url
FROM table_1
WHERE url NOT IN (SELECT DISTINCT url
FROM table_1
WHERE REGEXP_CONTAINS(url, r'((http(s)?):\/\/)(((25[0-5]|(2[0-4]|1[0-9]|[1-9]|)[0-9])(\.(?!$)|$)){4}$|(.*\.local)|(.*local\.)|(.*localhost)|(.*\.internal)|(.*csb.)|(.*codesandbox)|(.*lvh\.me)|(.*.ngrok.)|(.*nip\.io)|(.*.test)).*'))
ORDER BY url DESC
当我运行此查询时,我收到以下错误消息:BQSQLException: Cannot parse regular expression: invalid perl operator: (?!
我搜索了 StackOverflow 并注意到 1 个解决方案 here,但我无法使用 REGEXP_REPLACE 成功实施它 - 在我尝试实施此方案时以及阅读 Google Big Query 文档后,我不断收到其他错误。
从我的代码 sn-p 中可以看出,我试图仅输出非本地 IP 地址(它们是完整 url 链接的一部分)。因此,预期的输出是:
url
----------------------------------
http://stackoverflow.com/challenge
https://arseniyaskingquestion.ru/SO
【问题讨论】:
标签: regex google-bigquery