我有一个列,其中包含clob中的大型文本文件。它是一个json,但每个文件可以有不同的密钥名称。如何提取文件中任何位置的任何IP地址,而不管密钥名称是什么?
我尝试过类似的变化,但我要么得到一个无休止的空行返回,要么它完成返回什么。
SELECT
REGEXP_SUBSTR(
REGEXP_REPLACE(json, '[^0-9.]', ' '),
'\b(?:\d{1,3}\.){3}\d{1,3}\b',
1,
LEVEL
) AS extracted_ip
FROM
kg_json_tst
CONNECT BY PRIOR DBMS_RANDOM.VALUE IS NOT NULL
AND REGEXP_SUBSTR(REGEXP_REPLACE(json, '[^0-9.]', ' '), '\b(?:\d{1,3}\.){3}\d{1,3}\b', 1, LEVEL) IS NOT NULL
字符串
1条答案
按热度按时间ojsjcaue1#
试试这个:
字符串
如果您可能从同一个CLOB获得超过100个IP,则必须将100提高到更高的数字。从技术上讲,这将匹配500.500.500.500,这不是法律的的IP地址。您可以增强regexp,将前几位限制为0-2,但299.299.299.299也是不法律的的。最终,你不得不创建一个函数来应用各种IP规则,以真正确保你有一个好的IP。但在许多情况下,我认为四个八位字节的字符串几乎可以识别为IP,并且可能足够好。最后,使用我的方法,你需要选择一个不在文本中的标记(
$
)。CHR(19)
或类似的东西可能是更好的选择。