gpt4 book ai didi

正则表达式替换 : if not followed by letter or number

转载 作者:行者123 更新时间:2023-12-02 01:39:24 25 4
gpt4 key购买 nike

好吧,所以我想要一个正则表达式来解析未约定的(如果这就是所谓的)ipv6 地址

示例 ipv6 地址:1050::600:5:1000::

我想要返回的内容:1050:0000:0000:600:5:1000:0000:0000

我的尝试:

ip:gsub("%:([^0-9a-zA-Z])", ":0000")

第一个问题:它替换了第一个和第二个 :

所以 :: 被替换为 :0000

将其替换为 :0000: 将不起作用,因为那样它将以 : 结尾。此外,这会注意解析新添加的 : 导致:1050:0000::600:5:1000:0000:

那么我需要这个正则表达式做什么?

将每个 : 替换为 :0000 如果它后面没有跟数字或字母

主要问题::: 被替换而不是 1 :

最佳答案

gsub 和 Lua 字符串库中的其他函数使用 Lua Patterns这比正则表达式简单得多。多次使用该模式将处理模式与替换文本重叠的情况。该模式只需要应用两次,因为第一次会捕获偶数对,第二次会捕获奇数/新的冒号对。可以使用自己的模式分别处理尾随冒号和前导冒号。

ip = "1050:::600:5:1000::"
ip = ip:gsub("^:", "0000:"):gsub(":$", ":0000")
ip = ip:gsub("::", ":0000:"):gsub("::", ":0000:")
print(ip) -- 1050:0000:0000:600:5:1000:0000:0000

关于正则表达式替换 : if not followed by letter or number,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29372877/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com