私のレクサーで、私は次の正規表現を書きました:
"///"\s*[^@\s].*
デバッグモードでbyacc/jを実行しましたが、次の行が正規表現と一致したと表示されます。
しかし、なぜこの正規表現はこの行と一致するのですか?
/// @Service( version="1.0.0" )
特殊文字の"///"\s*[^\@\s].*
場合も試してみましたが、一致します。@
oO
私の正規表現は///
、オプションの空白が後に続く文字列にのみ一致すると思いました。空白以外の文字よりも@
、必ず来る必要があり、その後に任意の文字が続きます。
編集:申し訳ありませんが、正規表現はbyacc/jではなくjflex内で使用されています。
回避策:jflexのドキュメントでエスケープシーケンスが見つからなかったため\s
、この正規表現を試してみまし"///"[ \t\f]*[^@ \t\f].*
たが、機能しました。\s
エスケープ文字はサポートされておらず、jflexによって黙って無視されているようです。