lex コマンドにおける拡張正規表現

lex 指定ファイルで拡張正規表現を指定することは、 sed コマンドまたは ed コマンドで使用されるメソッドと同様です。

拡張正規表現は、突き合わせる一組の文字列を指定します。 この式には、テキスト文字と演算子文字の両方が入っています。 テキスト文字は、 比較対照文字列内の対応する文字と突き合わせます。 演算子文字は繰り返し、選択、およびその他の機能を指定します。

数字とアルファベットの文字は、テキスト文字と見なされます。 例えば、次のような拡張正規表現があるとします。integerストリングと一致するinteger、および式a57Dストリングを検索します。a57D.

演算子

次のリストは、拡張正規表現の指定に演算子をどのように使用するかを示しています。
Character
文字はCharacter. に一致します。

例: aリテラル文字 a; と一致します。bリテラル文字 b と一致し、かつ、cリテラル文字 c と一致します。

"文字列"
引用符で囲まれた文字列を、文字列に演算子が使われている場合でも、突き合わせます。

例: lex コマンドが解釈されないようにするには、次のようにします。$(ドル記号) を演算子として使用する場合は、その記号を引用符で囲んでください。

\Character または \Digits
エスケープ文字。 ストリングで使用される文字クラス演算子の前に置かれると、\文字は、演算子記号が演算子ではなくリテラル文字を表すことを示します。 有効なエスケープ・シーケンスは、以下のとおりです。
\a
アラート
\b
バックスペース
\f
用紙送り
\n
復帰改行文字 (式の中では、実際の復帰改行文字は使用しないでください。)
\r
復帰
\t
タブ
\v
垂直タブ
\\
円記号
\Digits
Digits ストリングで指定された 1 桁、 2 桁、または 3 桁の 8 進整数で表されるエンコード方式を使用する文字。
\xDigits
エンコードが Digits 文字列で指定された 16 進文字のシーケンスによって表される文字。

使用中の\上記のエスケープ・シーケンスのリストにない文字の前に文字があると、 lex コマンドはその文字を文字として解釈します。

例: \c次として解釈されますc文字が変更されていない[\^abc]文字を含む文字のクラスを表します。^abc.

注: 使用しない\0 または\x0これは、 lex コマンドの中にあります。
[リスト]
囲まれた範囲内の任意の 1 文字に一致します ([x-「y」]) または囲まれたリスト ([xyz]) lex コマンドが呼び出されるロケールに基づいています。 すべての演算子シンボルは、以下のものを除き、大括弧式内の特殊な意味を失います。-(ダッシュ)、^(キャレット)、および\(円記号)。

例: [abc-f]en_US ロケールの abcde、または f と一致します。

[:クラス:]
次の間に指定された文字クラスに属する文字のいずれかと一致します。[::]現行ロケールの LC_TYPE カテゴリーで定義されている区切り文字。 以下の文字クラス名は、すべての地域でサポートされています。
alnum   cntrl  lower   space

alpha   digit   print  upper

blank  graph   punct   xdigit

lex コマンドは、ユーザー定義の文字クラス名も認識します。 この[::]演算子が有効なのは次の場合だけです:[]式。

例: [[:alpha:]]現行ロケールの alpha 文字クラス内の任意の文字と一致しますが、[:alpha:]文字のみに一致します。:,a,l,pおよびh.

[.CollatingSymbol.]
以下の範囲内で指定された照合記号と一致します。[..]区切り文字を単一文字として使用します。 この[..]演算子が有効なのは次の場合だけです:[ ]式。 照合記号は、現行ロケールで有効な照合記号でなければなりません。

例: [[.ch.]]が次の値に一致するcおよびh同時に[ch]が次の値に一致するcまたはh.

[=CollatingElement=]
以下の範囲内で指定された照合エレメントと一致します。[==]区切り文字と、その等価クラスに属するすべての照合エレメント。 この[==]演算子が有効なのは次の場合だけです:[]式。

例:wおよびv同じ等価クラスに属します。[[=w=]]は次と等しい[wv]一致wまたはv.w等価クラスに属していない場合は、[[=w=]]が次の値に一致するwのみ

[^Character]
次の文字以外の任意の文字と一致します。^(キャレット) 記号。 結果の文字クラスは、 1 バイト文字のみで構成されます。 次の文字は、^記号はマルチバイト文字にすることができます。 ただし、この演算子がマルチバイト文字と一致するようにするには、定義セクションで %h および %m をゼロより大きい値に設定する必要があります。

例: [^c]次のいずれかの文字に一致c.

CollatingElement-CollatingElement
文字クラス内で、現行ロケール用に定義される照合順序内の文字の範囲を示します。 範囲は、昇順にする必要があります。 範囲終了ポイントは、照合で範囲開始ポイントと等しいかまたはそれ以上でなければなりません。 範囲は現行ロケールの照合順序に基づいているため、 lex コマンドが呼び出されたロケールによっては、指定された範囲が異なる文字に一致する場合があります。
?
直前の式の 0 個または 1 個のオカレンスと一致します。?演算子。

例: ab?cac または abc のいずれかに一致します。

ピリオド文字 (.)
復帰改行文字を除く、任意の文字を突き合わせます。 ピリオド文字のための順序 (.) マルチバイト文字に一致させるには、 lex 仕様ファイルの定義セクションで %z を 0 より大きい値に設定する必要があります。 %z が設定されていない場合、ピリオド文字 (.) は単一バイト文字のみに一致します。
*
直前の式の 0 個以上のオカレンスと一致します。*演算子。 例:a*任意の数の連続a文字 (ゼロを含む)。 ゼロ・オカレンスの突き合わせの有用性は、複雑な式の場合は明らかです。

例: 次の式は、[A-Za-z][A-Za-z0-9]* は、先頭に英字があるすべての英数字ストリングを示します。これには、英字が 1 文字だけのストリングも含まれます。 この式を、コンピューター言語における ID の認識のために使用することができます。

+
直前にあるパターンの 1 つ以上のオカレンスに一致します。+演算子。

例: a+1 つ以上のインスタンスに一致するa. また、[a-z]+小文字のすべてのストリングと一致します。

|
| (パイプ) 演算子の前または後にある式の突き合わせを示します。

例: ab|cd一致abまたはcd.

()
括弧の中の式を突き合わせます。 この()(括弧) 演算子はグループ化に使用され、括弧内の式は yytext 配列に読み込まれます。 括弧の中のグループは、他の任意のパターンの中の任意の単一文字の代わりに使用することができます。

例: (ab|cd+)?(ef)*次のようなストリングと一致するabefef,efefef,cdef、またはcddd; ただし、abc,abcd、またはabcdef.

^
Expression が行の先頭にある場合にのみ一致を示します。^(脱字記号) 演算子は、式の最初の文字です。

例: ^h一致する h行の先頭に表示されます。

$
「式」 が行の終わりにあり、かつ$(ドル記号) 演算子は、式の最後の文字です。

例:h$ は、行末にあるh と一致します。

Expression1/Expression2
式 2式 1の直後に続く場合にのみ一致することを示します。 この/(スラッシュ) 演算子は、最初の式のみを yytext 配列に読み込みます。

例:ab/cdストリングと一致するab、ただしその後に以下が続く場合のみcdその後、次を読み取ります。abyytext 配列に追加します。

注: 1 つのみ/末尾コンテキスト演算子は、単一の拡張正規表現で使用できます。 この^(キャレット) および$(ドル記号) 演算子を同じ式で使用することはできません。/演算子は、末尾コンテキストの特殊なケースを示します。
{DefinedName}
定義セクションで名前を定義したときに、名前を突き合わせます。

例: 次のように定義したとします。D数字になります。{D}すべての数字と一致します。

{Number1,Number2}
Number1とその直前のパターンNumber2のオカレンスと一致します。 式{Number}および{Number,}また、式の前にあるパターンの出現回数を正確に Number と一致させることもできます。

例: xyz{2,4}xyzxyz、xyzxyzxyz、または xyzxyzxyz のいずれかに一致します。 これは、以下とは異なります。+,*および?これらの演算子は、直前の文字にのみ一致します。 間隔式の直前の文字だけを一致させるには、グループ化演算子を使用します。 例:xy(z{2,4})xyzz、xyzzz、または xyzzzz と一致します。

<StartCondition>
字句解析プログラムが指定された開始条件である場合だけ、 関連したアクションを実行します。

例: 行の先頭にあることが開始条件である場合ONE、次に、^(脱字記号) 演算子が式と等しい<ONE>.

演算子文字をテキスト文字として使用するには、以下のいずれかのエスケープ・シーケンスを使用します。" "(二重引用符) または\(円記号)。 この" "operator は、囲まれているものがテキストであることを示します。 したがって、以下の例は次のストリングと一致します。xyz++:
xyz"++"

文字列の一部を引用符で囲むことができます。 通常、テキストの文字を引用符で囲んでも効果はありません。 例えば、次の式は前の例と同じです。

"xyz++"

テキストがテキストとして解釈されるようにするには、英字または数字でないすべての文字を引用符で囲んでください。

演算子文字をテキスト文字に変換するもう 1 つの方法は、\(円記号) 文字が演算子文字の前にあります。 例えば、次の式は前の例と同じです。
xyz\+\+