2016-12-05 4 views
0

私は([ " '])この正規表現を使用します(:???(=(\))\ 2。)* \ 1このanswer to this questionlex入力ファイルで正規表現をエスケープするには?

からしかし、私はlexの入力ファイルでそれを使うのか?次のように

DOUBLEQUOTE_CONTENTS([ "'])(:?(=(\))\ 2?)* \ 1

%%

{DOUBLEQUOTE_CONTENTS} {のprintf(?" をここに"); }

lexから多数の「認識されない文字」エラーが発生します。それは最初に窒息する?それ以降はさらに多くのことがあります。私がエスケープすれば?文字、正規表現はもはや一致しません。

上記の正規表現をどのようにしてlex入力ファイルで使用できますか?

+0

WiktorStribiż[email protected]そうかもしれないが、それは私が信じている質問への偶発的です。 –

+0

パターンを展開するだけでいいと思います。「[^ "\\] *(\\。[^" \\] *)* "" | [^ '\\] *(\\。[^' \\] *)* '' –

答えて

0

(F)lexは先読み((?=...)と友人)や貪欲でない繰り返し(*?)を実装していません。キャプチャしないので、キャプチャされていないカッコ((?:...))は冗長です。最後に、バックリファレンス(\2)を実装していません。

つまり、本当に正規の正規表現しか使用できません。許可される内容についてはflex manualをご覧ください。

はここで先読みまたは後方参照に依存しない単純なパターンです:

["]([^"\\]|\\.)*["]|'([^'\\]|\\.)*' 
+0

あなたが提供するパターンは、変更のために非効率的です。私は上記の私のコメントから正規表現を使用することをお勧めします。 –

+0

@wiktor:フレックスでは、フレックスはDFAを作成するため、自由に変更できます。この回答を参照してください。ベンチマークが含まれています:http://stackoverflow.com/a/26922380/1566221 – rici

関連する問題