ホームページ  >  記事  >  ウェブフロントエンド  >  正規表現(文法)

正規表現(文法)

亚连
亚连オリジナル
2018-05-21 09:35:441204ブラウズ

それでは正規表現の記事(文法のススメ)をお届けします。今からそれを皆さんと共有し、皆さんの参考にしてください。

正規表現の構造の概要

構造は

文字

x 文字 x
\ バックスラッシュ文字
と一致します

(?:X) ゼロ幅の正の先読みによる
(?=X) X の非キャプチャ グループ
(?!X) ?( ?>X) ----------------------------------



バックスラッシュ、エスケープ、引用符

バックスラッシュ文字 ('') は、上の表で定義されているように、エスケープされた構成体を参照するために使用されます。また、エスケープされていない構成体として解釈される他の文字を参照するためにも使用されます。したがって、式 \ は 1 つのバックスラッシュに一致し、{ は左括弧に一致します。 エスケープ構造を表さないアルファベット文字の前にバックスラッシュを使用するのはエラーです。バックスラッシュは、正規表現言語の将来の拡張用に予約されています。バックスラッシュは、文字がエスケープ構成の一部であるかどうかに関係なく、アルファベット以外の文字の前に使用できます。 Java ソース コード内の文字列内のバックスラッシュは、Java 言語仕様の要求に従って、Unicode エスケープまたはその他の文字エスケープとして解釈されます。したがって、正規表現が Java バイトコード コンパイラによって解釈されないように保護されていることを示すには、文字列リテラル内で 2 つのバックスラッシュを使用する必要があります。たとえば、正規表現として解釈される場合、文字列リテラル「b」は単一のバックスペース文字と一致し、「\b」は単語の境界と一致します。文字列リテラル "(hello)" は無効であり、コンパイル時エラーが発生します。文字列 (hello) と一致するには、文字列リテラル "\(hello\)" を使用する必要があります。

文字クラス

文字クラスは、他の文字クラス内に出現することができ、和集合演算子 (暗黙的) と交差演算子 (&&) を含めることができます。 Union 演算子は、少なくとも 1 つのオペランド クラス内のすべての文字を含むクラスを表します。交差演算子は、両方のオペランド クラスにあるすべての文字を含むクラスを表します。

文字クラス演算子の優先順位は、最高から最低の順に次のとおりです:

1 リテラル値エスケープ x

2 グループ化 [...]

3 範囲 a-z 4 Union [a-e ][i-u] 5 交差点 [a-z&&[aeiou]]

メタキャラクターのさまざまなセットは、実際には文字クラスの外側ではなく、文字クラスの内側にあることに注意してください。たとえば、正規表現 . は文字クラス内での特別な意味を失いますが、式 - はメタキャラクターを形成する範囲になります。



行末記号

行末記号は、一連の入力文字の行の終わりをマークする 1 つまたは 2 つの文字のシーケンスです。次のコードが行終端記号として認識されます: 改行 (ラインフィード) 文字 ('n')、 復帰文字 ("rn") に続く改行文字、 復帰文字のみ ('r' )、

次の行文字 ('u0085')、

行区切り文字 ('u2028')、または

段落区切り文字 ('u2029)。

UNIX_LINES モードが有効な場合、認識される行終了文字は改行文字のみです。

DOTALL フラグが指定されていない場合、正規表現は任意の文字 (行末文字を除く) と一致します。

デフォルトでは、正規表現 ^ と $ は行末記号を無視し、それぞれ入力シーケンス全体の先頭と末尾のみに一致します。 MULTILINE モードがアクティブな場合、^ マッチングは入力の先頭と行終端文字の後 (入力の末尾) で発生します。 MULTILINE モードの場合、$ は行終端記号の前または入力シーケンスの最後でのみ一致します。

グループとキャプチャ

キャプチャ グループには、左かっこを左から右に数えることによって番号を付けることができます。たとえば、式 ((A)(B(C))) には、そのようなグループが 4 つあります: 1 ((A)(B(C))) 2 A 3 (B(C))

4 (C)

グループ 0 は常に式全体を表します。


キャプチャ グループは、マッチングにおいて、これらのグループに一致する入力シーケンスのすべてのサブシーケンスが保存されるため、このように名前が付けられます。キャプチャされたサブシーケンスは、後で後方参照を介して式で使用することも、マッチング操作の完了後にマッチャーから取得することもできます。

グループに関連付けられたキャプチャ入力は、常にそのグループに最もよく一致するサブシーケンスです。量子化によりグループが再度計算される場合、2 番目の計算が失敗した場合、以前にキャプチャされた値 (存在する場合) が保持されます。たとえば、文字列「aba」と式 (a(b)?)+ が一致すると、セットされます。 2番目のグループを「b」にします。各一致の開始時に、キャプチャされた入力はすべて破棄されます。

(?) で始まるグループは純粋な非キャプチャ グループであり、テキストはキャプチャされず、グループの合計にはカウントされません。

上記は私があなたのためにまとめたものです。

関連記事:

JS でクロージャーが悪用される一般的なシナリオは何ですか? (画像とテキストのチュートリアル)

jsでオブジェクトをコピーするには? (画像とテキストのチュートリアル)

jsを使用してメッセージボードを実装する例(コードが提供されます)

以上が正規表現(文法)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。