ホームページ  >  記事  >  バックエンド開発  >  PHP 正規表現_PHP チュートリアル

PHP 正規表現_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-13 17:47:591069ブラウズ

1. はじめに
現在、正規表現は、*nix (Linux、Unix など)、HP などのオペレーティング システム、PHP、C#、Java などの開発環境、および多くのアプリケーション ソフトウェアを含む多くのソフトウェアで広く使用されています。

正規表現を使用すると、強力な機能を簡単な方法で実現できます。シンプルで効果的でありながら強力であるために、正規表現コードはより難しく、習得するのが簡単ではないため、使い始めた後は、特定のリファレンスを参照して使用するのが比較的簡単で効果的です。

例: ^.+@.+\..+$

この種のコードを見て私は何度も怖くなってしまいました。おそらく多くの人がそのようなコードを怖がってしまうでしょう。この記事を読み続けると、このようなコードを自由に適用できるようになります。

2. 正規表現の歴史
正規表現の「祖先」は、人間の神経系がどのように機能するかについての初期の研究にまで遡ることができます。 2 人の神経生理学者、ウォーレン・マカロックとウォルター・ピッツは、これらのニューラル ネットワークを記述する数学的方法を開発しました。

1956 年、Stephen Kleene という数学者は、McCulloch と Pitts の初期の研究に基づいて「ニューラル ネットワーク イベントの表現」というタイトルの論文を発表し、正規表現の概念を導入しました。正規表現は、彼が「正規集合の代数」と呼ぶ式を記述するために使用されるため、「正規表現」という用語が付けられています。

この研究は、Unix の主な発明者である Ken Thompson による計算検索アルゴリズムを使用した初期の研究に適用できることが後に判明しました。正規表現を最初に実際に応用したのは、Unix の qed エディターでした。

彼らが言うように、残りは私たち全員が知っている歴史です。それ以来、正規表現はテキストベースのエディターや検索ツールの重要な部分となってきました。

3. 正規表現の定義
正規表現 (正規表現) は、文字列に特定の部分文字列が含まれているかどうかを確認したり、一致する部分文字列を置き換えたり、特定の文字列から特定の条件を満たす部分文字列を抽出したりするために使用できる文字列の一致パターンを記述します。

正規表現は、通常の文字 (a から z までの文字など) と特殊文字 (メタキャラクターと呼ばれる) で構成されるテキスト パターンです。正規表現は、文字パターンと検索文字列を照合するテンプレートとして機能します。

3.1 通常のキャラクター

メタキャラクターとして明示的に指定されていないすべての印刷文字と非印刷文字で構成されます。これには、すべての大文字と小文字のアルファベット、すべての数字、すべての句読点、および一部の記号が含まれます。

3.2 非印刷文字

cx x で指定された制御文字と一致します。たとえば、cM は Control-M または復帰文字と一致します。 x の値は、A ~ Z または a ~ z のいずれかでなければなりません。それ以外の場合、c はリテラルの「c」文字として扱われます。 f フォームフィードと一致します。 x0c および cL に相当します。 ん 改行文字と一致します。 x0a および cJ に相当します。 r 復帰文字と一致します。 x0d および cM に相当します。 す スペース、タブ、フォームフィードなどを含む任意の空白文字と一致します。 【fnrtv】に相当。 S 空白以外の文字と一致します。 [^ fnrtv] に相当します。 ち タブ文字と一致します。 x09 および cI に相当します。 v 垂直タブ文字と一致します。 x0b および cK に相当します。

3.3 特殊文字
いわゆる特殊文字は、特別な意味を持つ文字です。たとえば、上記の「*.txt」の * は、単に任意の文字列の意味を意味します。ファイル名に * が含まれるファイルを検索する場合は、* をエスケープする、つまり * の前に 1 を追加する必要があります。 ls*.txt。正規表現には次の特殊文字があります。

キャラクターシンボル 意味が含まれています
と言った を使用します。 * 前の部分式と 0 回以上一致します。* 文字と一致するには、*+ 前の部分式と 1 回以上一致します。 + 文字と一致するには、+. 改行文字 n を除く任意の 1 文字に一致します。 . に一致するには、.[ 角括弧式の始まりを示します。 [と一致させるには、[? 先行する部分式と 0 回または 1 回一致するか、非貪​​欲修飾子を指定します。 ? 文字に一致するには、? 次の文字を特殊文字、リテラル文字、後方参照、または 8 進エスケープ文字としてマークします。 ^ 角括弧式で使用されない限り、入力文字列の先頭と一致します。角括弧式で使用されている場合は、文字セットが受け入れられないことを示します。 ^ 文字そのものと一致させるには、^{ 修飾子式の始まりをマークします。 { と一致させるには、{| 2 つの項目から選択を示します。 | と一致させるには、|
キャラクター
$ RegExp オブジェクトの Multiline プロパティが設定されている場合は、$ 文字自体と一致するように $
() 部分式の開始と終了をマークし、後で使用するために部分式を取得するには、( と ) を使用します。
を使用します。
を使用します。
を使用してください。
]を使用します
を使用します。
を使用します。
を使用します
を使用します

3.4予選

修飾子は、一致を満たすために正規表現の特定のコンポーネントが何回出現する必要があるかを指定するために使用されます。 * または + または ? または {n} または {n,} または {n,m} の 6 種類があります。 *、+、および ? 修飾子はすべて、それらの後に ? を追加することで可能な限り多くのリテラルと一致するという点で貪欲です。

正規表現の修飾子は次のとおりです:

* 直前の部分式と 0 回以上一致します。たとえば、zo* は「z」と「zoo」に一致します。 * {0,}+ 前の部分式と 1 回以上一致します。たとえば、「zo+」は「zo」と「zoo」には一致しますが、「z」には一致しません。 + {1,} と同等? 前の部分式と 0 回または 1 回一致します。たとえば、「do(es)?」は「do」または「does」の「do」と一致します。 ? {0,1}{n} n は負ではない整数です。一致が n 回決定されました。たとえば、「o{2}」は「Bob」の「o」と一致することはできませんが、「food」の 2 つの o{n,} n は負ではない整数です。少なくとも n 回一致します。 {n,m} m と n は両方とも非負の整数であり、n

3.5 ロケーター

文字列または単語の境界を表すために使用されます。^ と $ はそれぞれ文字列の先頭と末尾を指し、b は単語の前または後ろの境界を表し、B は単語以外の境界を表します。修飾子はロケーターでは使用できません。


3.6

を選択

すべてのオプションを括弧で囲み、隣接するオプションを | で区切ります。ただし、括弧を使用すると、関連する一致がキャッシュされるという副作用が生じます。この場合、最初のオプションの前に ?: を使用すると、この副作用を排除できます。
このうち、?: は非キャプチャ要素の 1 つで、他の 2 つの非キャプチャ要素は ?= と ?! です。これら 2 つは前方参照であり、任意の括弧内の正規表現と一致します。検索文字列は正規表現パターンの任意の位置で一致します。これは、正規表現パターンに一致しない最初の位置で検索文字列と一致する否定先読みです。

3.7 後方参照

正規表現パターンまたはパターンの一部を括弧で囲むと、キャプチャされた各部分一致が正規表現パターンの左から右に保存されます。部分一致が格納されるバッファには、1 から始まり、最大 99 個の部分式まで連続した番号が付けられます。各バッファには、「n」を使用してアクセスできます。n は、特定のバッファを識別する 1 桁または 2 桁の 10 進数です。
非キャプチャ メタキャラクタ「?:」、「?=」、または「?!」を使用すると、関連する一致の保持を無視できます。

4. 各種演算子の動作優先順位

同じ優先度の操作は左から右に実行され、異なる優先度の操作は高から低に実行されます。さまざまな演算子の優先順位は高いものから低いものまで次のとおりです:


特殊文字 は言いました
に相当
に相当
には一致します。
キャラクターシンボル 説明説明
エスケープキャラクター
()、(?:)、(?=)、[] 丸括弧と角括弧
*、+、?、{n}、{n,}、{n,m} 予選
^、$、任意のメタ文字 位置と順序
| 「OR」演算


Lee.さんのコラムより抜粋

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/478463.html技術記事 1. はじめに 現在、正規表現は、*nix (Linux、Unix など)、HP およびその他のオペレーティング システム、PHP、C#、Java およびその他の開発環境など、多くのソフトウェアで広く使用されています。
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。