このコードの動作について疑問に思っていました:
str = "abcd"
print( str:find"a(bc)d" ) -- prints 1 4 bc
print( str:find"(ab)cd" ) -- prints 1 4 ab
2 つの行は両方とも異なる文字列を探して返しますが、参照のフレームが同じであるため、同じインデックスを返します。つまり、インデックスの計算時にキャプチャは無視されますが、その後は正常に返されます。
私の最初の質問は何がうまくいかなかったのかということでしたが、実際にはマニュアルがこれが適切な動作であることを示していることがわかりました (あまり明確ではありませんが)。
問題は、そのマーカーの位置を返さずに、近くのマーカーに基づいて何かを見つけようとしていたことです。最初のキャプチャの位置があれば、その位置を返すことを期待string.find
していたので、位置が必要な部分を括弧で囲みました。明らかに、それは役に立ちませんでした。問題に対する別の (そしてより良い) 解決策を見つけましたが、それが常に可能または便利だとは思いません。
string.find
このように振る舞う理由はありますか?ユーザーにとって特にメリットはありますか?Luaを完全に使いこなせば、深刻な問題を引き起こすことは実際にはありませんか?