4

基本文字列は次のとおりです。IP: 192.168.0.1

その文字列をstring.gmatch関数(パターンの下以外)に渡すと、次の結果が返されます。

パターン:IP: (%d+.%d+.%d+.%d+) -> 192.168.0.1

パターン:IP: %d+.%d+.%d+.%d+ -> IP:192.168.0.1

私の質問は、Luaパターンマッチングエンジンの括弧の意味は何ですか?なぜ最初のパターンで括弧を使用することによって、IP:文字列は省略されますが、2番目のパターンではありませんか?

4

2 に答える 2

6

括弧内はすべてキャプチャグループです。括弧内のパターンの部分と一致する入力文字列の任意の部分がキャプチャされ、とによって返されmatch()ますgmatch()。パターンにキャプチャグループがない場合は、文字列全体が返されます。

local x, y, z = ("123456"):match("(%d)%d(%d)%d(%d)%d")
print(x, y, z)
-- 1, 3, 5

関連するキャプチャグループが指定された後の任意の時点で%1%2などを使用してキャプチャされた値にアクセスできます。

local x, y = ("123123123"):match("(%d%d%d)%1(%1)")
print(x, y)
-- 123, 123

これは、の3番目のパラメーターで最もよく見られますがstring.gsub()、任意のパターンマッチング関数で使用できます。

于 2012-07-27T19:07:04.107 に答える
-1

この場合、それは物事をグループ化するために使用されるべきであり、ここではどちらの方法でもあまり重要ではありません。

于 2012-07-27T18:48:15.013 に答える