ホームページ >バックエンド開発 >PHPチュートリアル >PHP 正規表現を学ぶ簡単な方法_PHP チュートリアル
1. はじめに
簡単に言えば、正規表現はパターンの一致と置換のための強力なツールです。正規表現は、vi エディター、Perl または PHP スクリプト言語、awk または sed シェル プログラムなど、UNIX システムに基づくほとんどすべてのツールで見つけることができます。さらに、JavaScript などのクライアント側スクリプト言語も正規表現のサポートを提供します。正規表現は、特定の言語やシステムの制限を超えて、広く受け入れられた概念と機能になっていることがわかります。
正規表現を使用すると、一連の特殊文字を使用して一致パターンを構築し、比較オブジェクトに一致する文字列が含まれるかどうかに応じて、その一致パターンをデータ ファイル、プログラム入力、Web ページ上のフォーム入力などのターゲット オブジェクトと比較できます。パターンに対応するプログラムを実行します。
たとえば、正規表現の最も一般的な用途の 1 つは、ユーザーがオンラインで入力した電子メール アドレスの形式が正しいかどうかを確認することです。ユーザーの電子メール アドレスの形式が正しいことを確認するために正規表現が使用されている場合、ユーザーが入力したフォーム情報は通常どおり処理されます。それ以外の場合、ユーザーが入力した電子メール アドレスが正規表現パターンと一致しない場合は、正しい電子メール アドレスを入力するように求めるプロンプト メッセージがポップアップ表示されます。 WEBアプリケーションの論理判断において正規表現が重要な役割を果たしていることが分かります。
2. 基本文法
正規表現の機能と効果を予備的に理解した後、正規表現の構文形式を詳しく見てみましょう。
正規表現の形式は一般に次のとおりです:
/愛/
「/」区切り文字間の部分は、ターゲット オブジェクト内で照合されるパターンです。ユーザーは、一致するオブジェクトを検索するパターンのコンテンツを「/」区切り文字の間に入れるだけで済みます。ユーザーがパターンの内容をより柔軟にカスタマイズできるようにするために、正規表現は特別な「メタキャラクター」を提供します。いわゆるメタキャラクタは、正規表現において特別な意味を持つ特殊文字を指します。これを使用して、ターゲット オブジェクト内で先頭の文字 (つまり、メタキャラクタの前にある文字) の出現パターンを指定できます。
より一般的に使用されるメタ文字には、「+」、「*」、および「?」があります。このうち、「+」メタキャラクタは、その先頭文字が対象オブジェクト内で 1 回以上出現する必要があることを規定し、「*」メタキャラクタは、その先頭文字が対象オブジェクト内で 0 回または連続して複数回出現する必要があることを規定します。 「?」文字は、その前のオブジェクトがターゲット オブジェクト内に 0 回または 1 回出現する必要があることを指定します。
次に、正規表現メタキャラクターの具体的な用途を見てみましょう。
/fo+/
上記の正規表現には「+」メタ文字が含まれているため、ターゲット オブジェクト内の「fool」、「fo」、「football」など、文字 f の後に 1 つ以上の文字 o が連続して出現する文字列と一致できることを意味します。 。
/例*/
上記の正規表現にはメタキャラクター「*」が含まれているため、対象オブジェクト内の「easy」、「ego」、「egg」など、後ろに 0 個以上の文字 g が連続して出現する文字列と比較できることを意味します。 eの文字が一致します。
/ウィル?/
上記の正規表現には「?」メタ文字が含まれているため、ターゲット オブジェクトの「Win」または「Wilson」、および文字 i の後に 0 個または 1 個の文字 l が連続して出現するその他の文字列と一致できることを意味します。
メタキャラクターに加えて、ユーザーは一致したオブジェクトにパターンが出現する頻度を正確に指定できます。たとえば、
/ジム{2,6}/
上記の正規表現では、文字 m が一致するオブジェクト内に 2 ~ 6 回連続して出現できると規定されているため、上記の正規表現は jimmy や jimmmmy などの文字列と一致します。
正規表現の使用方法を予備的に理解した後、他のいくつかの重要なメタ文字の使用方法を見てみましょう。
s: タブ キーや改行文字を含む単一のスペース文字と一致するために使用されます。
S: 単一のスペース文字を除くすべての文字と一致するために使用されます
d: 0 から 9 までの数字と一致するために使用されます。
w: 文字、数字、またはアンダースコア文字と一致するために使用されます。
W: w に一致しないすべての文字に一致するために使用されます
;
. : 改行文字を除くすべての文字と一致するために使用されます。
(説明: s と S、w と W は相互の逆演算と考えることができます)
以下では、例を通して正規表現で上記のメタキャラクターを使用する方法を見ていきます。
/s+/
上記の正規表現は、ターゲット オブジェクト内の 1 つ以上のスペース文字と一致するために使用できます。
/d000/
複雑な財務諸表が手元にある場合は、上記の正規表現を使用して、合計数千ドルのすべての金額を簡単に見つけることができます。
上で紹介したメタ文字に加えて、正規表現にはロケーターという別の固有の特殊文字もあります。ロケーターは、ターゲット オブジェクト内で一致するパターンが現れる場所を指定するために使用されます。
より一般的に使用されるロケーターには、「^」、「$」、「b」、「B」などがあります。このうち、「^」ロケーターは、一致するパターンがターゲット文字列の先頭に出現する必要があることを指定し、「$」ロケーターは、一致パターンがターゲット オブジェクトの末尾に出現する必要があることを指定し、b ロケーターは、一致するパターンがターゲット オブジェクトの末尾に出現する必要があることを指定します。一致するパターンは、ターゲット文字列の先頭または末尾の 2 つの境界のいずれかに出現する必要がありますが、「B」ロケーターは、一致するオブジェクトがターゲット文字列の先頭と末尾の 2 つの境界内に存在する必要があると規定しています。つまり、一致するオブジェクトをターゲット文字列の先頭または文字列の末尾として使用することはできません。同様に、「^」と「$」、「b」と「B」も、互いに逆演算である 2 セットのロケーターとみなすことができます。例:
/^地獄/
上記の正規表現には「^」ロケーターが含まれているため、ターゲット オブジェクト内の「hell」、「hello」、または「hellhound」で始まる文字列と一致します。
/ar$/
上記の正規表現には「$」ロケーターが含まれているため、ターゲット オブジェクト内の「car」、「bar」、または「ar」で終わる文字列と一致します。
/ボム/
上記の正規表現パターンは「b」ロケーターで始まるため、ターゲット オブジェクト内の「bomb」または「bom」で始まる文字列と一致します。
/マンブ/
上記の正規表現パターンは「b」ロケーターで終わるため、ターゲット オブジェクト内の「human」、「women」、または「man」で終わる文字列と一致します。
ユーザーがより柔軟に照合パターンを設定できるようにするために、正規表現を使用すると、特定の文字に限定されず、照合パターン内の特定の範囲を指定できます。例:
/[A-Z]/
上記の正規表現は、A から Z までの任意の大文字と一致します。
/[a-z]/
上記の正規表現は、a から z までの範囲内の任意の小文字と一致します。
/[0-9]/
上記の正規表現は、0 から 9 までの任意の数値と一致します。
/([a-z][A-Z][0-9])+/
上記の正規表現は、「aB0」などの文字と数字で構成される任意の文字列と一致します。ここでユーザーが注意する必要があるのは、正規表現で「()」を使用して文字列を結合できることです。 「()」記号に含まれる内容は、ターゲット オブジェクトにも出現する必要があります。したがって、「abc」の最後の文字は数字ではなく文字であるため、上記の正規表現は「abc」などの文字列には一致しません。
プログラミング ロジックの「OR」演算に似た正規表現を実装し、複数の異なるパターンのいずれかを選択して一致させる場合は、パイプ文字「|」を使用できます。例:
/へ|も|2/
上記の正規表現は、ターゲット オブジェクトの "to"、"too"、または "2" に一致します。
正規表現でより一般的に使用される演算子として、否定演算子「[^]」もあります。先ほど紹介したロケーター「^」とは異なり、否定文字「[^]」は、パターンで指定された文字列が対象オブジェクト内に存在できないことを指定します。例:
/[^A-C]/
上記の文字列は、A、B、C を除くターゲット オブジェクト内の任意の文字と一致します。一般に、「^」が「[]」の中にある場合は負の演算子とみなされ、「^」が「[]」の外にある場合、または「[]」がない場合は負の演算子とみなされます。オペレーター。
最後に、ユーザーが正規表現パターンにメタキャラクターを追加して、一致するオブジェクトを見つける必要がある場合は、エスケープ文字「」を使用できます。例:
/こ*/
上記の正規表現は、対象オブジェクト内の「The」などではなく「Th*」と一致します。
3. 使用例
①PHP の ereg() 関数を使用して、パターン マッチング操作を実行できます。 ereg() 関数の使用形式は次のとおりです:
以下、引用内容です
ereg(パターン, 文字列)
このうち、patternは正規表現のパターンを表し、stringは検索・置換操作を行う対象のオブジェクトです。メールアドレスの認証も同様です。PHPで書かれたプログラムコードは以下の通りです。
if (ereg(“^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+(.[a-zA-Z0-9_-])+”,$メール)){
echo 「あなたのメールアドレスは正しいです!」;}
他{
echo 「もう一度試してください!」;
}
?>
②JavaScript 1.2 には、正規表現のマッチング操作を実行するために使用できる強力な RegExp() オブジェクトが付属しています。 test() メソッドは、ターゲット オブジェクトに一致するパターンが含まれているかどうかを確認し、それに応じて true または false を返すことができます。
JavaScript を使用して次のスクリプトを作成し、ユーザーが入力した電子メール アドレスの有効性を確認できます。
以下、引用内容です
<頭>
<スクリプト言語="Javascript1.2">
スクリプト>