1

2 つの文字列があります。各文字列には、次のような多くの行があります。

string1 = "  DEFAULT-VLAN         | Manual     10.1.1.3      255.255.255.0 "
string2 = "  1       DEFAULT-VLAN                     | Port-based No    No"

最初の文字列を次の文字列に分割しました: "DEFAULT-VLAN"、"|"、"Manual"...次に、vlanName ("DEFAULT-VLAN") の string2 で ID ("1") を検索します。 ) string1 から。

このコードを使用して、正しい部分文字列を見つけます。

vpos1, vpos2 = vlan:find("%d-%s-" .. vlanName .. "%s-|")

しかし、vpos1 と vpos2 は nil です。vlanName からハイフン ("-") を削除すると機能します。
Lua は、そのような文字列内の特殊文字をエスケープするように注意するべきではありませんか? 文字列は私の C++ アプリケーションから Lua に渡され、多くの特殊文字が含まれている可能性があります。
これを解決する簡単な方法はありますか?

ありがとう!

4

1 に答える 1

4

ルアは魔法ではありません。式"%d-%s-" .. vlanName .. "%s-|"が行うことは、いくつかの文字列を連結して、最終的な文字列を生成することだけです。その文字列が何に使用されるのかはわかりません。それを知っているだけstring.findで、与えられたパラメーターがどのように使用されるかに影響を与えることはできません。

はい、vlanNameLua パターンとして解釈されます。また、特殊文字を使用する場合は、それらをエスケープする必要があります。そのために使用することをお勧めしstring.gsubます。次のようになります。

vlanName:gsub("[%-...]", "%%%0")

...エスケープしたい他の文字はどこにありますか。

于 2013-02-15T21:23:47.073 に答える