2016-09-01 5 views
3

key="VALUE"を含む行のVALUEを抽出したいので、これを解決するために単純なLuaパターンを使用しようとしています。Luaパターンのキャプチャグループは、キャプチャグループの代わりにリテラル数字文字と一致します

これは、VALUEにリテラル1が含まれている行を除いた行に適用されます。パターンパーサがエスケープシーケンスのために私のキャプチャグループを混乱させるようです。

> return string.find('... key = "PHONE2" ...', 'key%s*=%s*(["\'])([^%1]-)%1') 
5  18  "  PHONE2 
> return string.find('... key = "PHONE1" ...', 'key%s*=%s*(["\'])([^%1]-)%1') 
nil 
> 

答えて

1

[^%1]はまったく使用する必要はありません。単に.-を使用すると、可能な限り小さな文字列に一致します。

また、あなたはあなたのパターンで引用符をエスケープする必要はありませんし、複数行の文字列構文を使用することができます。

> s=[[... key = "PHONE1" ...]] 
> return s:find [[key%s*=%s*(["'])(.-)%1]] 
5  18  "  PHONE1 

[^%1]が実際に意味のパターンを、個別に文字%1を検索しません。

+0

ありがとうございました。私はそれがセットにキャプチャグループを含めるように強制するために1をエスケープすることも同様に見つける。 '[^%\ 1]' あなたの解決策は理にかなっていて、よりクリーンです。私はそれを使用します。 – nolan

+0

@nolanその場合、 '[^ \ 1]'を使いたいだけです。 '%'文字は必須ではありません。 – hjpotter92

+0

確かにそうではありません。ありがとうございました。 – nolan

関連する問題