2017-07-26 8 views
2

文字列から特定の値を抽出したい。これは私の文字列私はLUAでstring.matchを使用して、この文字列から192.168.19.55 IPアドレスを抽出するにはどうすればよいルアの特定の文字列からIPアドレスを抽出する

iptables -t nat -A PREROUTING -p tcp -m tcp --dport 666 -j DNAT --to-destination 192.168.19.55 

のですか?

私はlocal ip = s:match("--to-destination (%d+.%d+.%d+.%d+)"))としましたが、値192.168.19.55を取得しませんでした。私は空の価値を得ています。

これに間違いがありますか?助言がありますか ?

+0

'%'を使用して '-'をエスケープする必要があります。これはLuaパターンの魔法の文字です。 – lhf

答えて

3

使用

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 

online Lua demoを参照してください。

-は、Luaパターンの遅延量指定子であるため、エスケープする必要があります。また、.は任意のcharにマッチするので、それをエスケープしてリテラルドットと一致させる必要があります。

詳細はLua patterns Web pageをご覧ください。

+0

cool。どうもありがとうございました !! –

+1

あなたが 'destination'から来るIPであることを確信しているならば、あなたは' '('% - デスティネーション([%d。] +) https://ideone.com/pTzGrq)。 '[...]'の中の '。 'はエスケープする必要はなく、' [%d。] + 'は1つ以上の数字またはドットにマッチします。 –

+0

ええ。やりました 。歓声!!! –

3

また、これは動作します:

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

それは、destination後に空白以外の文字の実行中の単語を次の単語を抽出します。

+0

はい、それはあまりにもIPv6のために働くでしょう。しかしおそらく、利用可能な文字の数を制限する方がいいでしょう(例えば、 '() - ' 'は許されないべきです) –

関連する問題