在 Lua 中从特定字符串中提取 IP 地址

3
我想从一个字符串中提取特定的值。这是我的字符串。
iptables -t nat -A PREROUTING -p tcp -m tcp --dport 666 -j DNAT --to-destination 192.168.19.55

如何使用lua中的string.match从该字符串中提取IP地址192.168.19.55

我已经尝试了local ip = s:match("--to-destination (%d+.%d+.%d+.%d+)")),但是我没有得到值为192.168.19.55。我得到了空值。

这里有什么错误吗?有什么建议吗?


你需要使用%-来转义-,因为在Lua模式中它是一个特殊字符。 - lhf
2个回答

4

使用

local s = "iptables -t nat -A PREROUTING -p tcp -m tcp --dport 666 -j DNAT --to-destination 192.168.19.55"
ip = s:match("%-%-to%-destination (%d+%.%d+%.%d+%.%d+)")
print(ip)
-- 192.168.19.55

请查看在线Lua演示
请注意,-是Lua模式中的懒惰量词,因此必须进行转义。此外,.匹配任何字符,因此您需要对其进行转义,以匹配一个字面点。
请访问Lua模式网页了解更多信息。

1
请注意,如果您确定始终是IP来自“destination”,您还可以使用[s:match(%-%-to%-destination([%d。] +))](https://ideone.com/pTzGrq)。` [...]中的. 无需转义, [%d。] +` 匹配一个或多个数字或点。 - Wiktor Stribiżew

3

这也可以起作用:

ip = s:match("destination%s+(%S+)")

它提取了destination之后的下一个单词,而单词是由非空格字符组成的一系列字符。

是的,它也适用于IPv6。但是最好限制可用字符的数量(例如,不应允许使用 ()-")。 - Egor Skriptunoff

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接