ホームページ >バックエンド開発 >PHPチュートリアル >PHPの正規ルールを詳しく解説
正規表現とは:
簡単に言うと、正規表現はパターン マッチングと置換に使用できる強力なツールです。
Perl や PHP スクリプト言語など、UNIX/LINUX システムに基づくほぼすべてのソフトウェア ツールで正規表現の痕跡を見つけます。
さらに、クライアント側スクリプト言語である JavaScript も正規表現をサポートしています。現在、正規表現は一般的な概念およびツールとなり、さまざまな技術者によって広く使用されています。
Linux の Web サイトには次のような記述があります。「Linux 愛好家に何が一番好きかを尋ねれば、彼はおそらく正規表現と答えるでしょう。面倒なインストールと構成以外で最も恐れていることは何かと尋ねれば、彼はこう答えるでしょう」必ず「正規表現」と言ってください。 "
上で述べたように、正規表現は非常に複雑で怖く見えます。ほとんどの PHP 初心者はこれをスキップして、以下の学習を続けるでしょう。ただし、PHP の正規表現はパターン マッチングを使用できます。条件を満たす文字列の検索、文字列が条件を満たすかどうかの判断、修飾された文字列を指定した文字列で置き換えるなどの強力な関数を学びます...
正規表現の基本構文:
A 正規表現は、区切り文字、式、修飾子の 3 つの部分に分かれています。 。
区切り文字には、特殊文字 (「/!」など) を除く任意の文字を使用できます。一般的に使用される区切り文字は「/」です。
式は、いくつかの特殊文字 (特殊文字の詳細については以下を参照) と特殊文字列以外で構成されます。たとえば、「[a-z0-9_-]+@[a- z0-9_-.]+」となります。単純な電子メール文字列と一致します。
修飾子は、特定の機能/モードをオンまたはオフにするために使用されます。
以下は完全な正規表現の例です:
/hello.+?hello/is
上記の正規表現 "/" は区切り文字であり、2 つの "/" の間にあるものが 2 番目の式です。 「/」の後の文字列「is」は修飾子です。
式に区切り文字が含まれている場合は、「/hello.+?/hello/is」などのエスケープ記号「」を使用する必要があります。エスケープ記号は区切り文字として使用されるだけでなく、特殊文字も実行できます。文字で構成されるすべての特殊文字は、すべての数字を表す「d」などでエスケープする必要があります。
正規表現の特殊文字:
正規表現の特殊文字は、メタ文字、位置決め文字などに分類されます。
メタキャラクターは、正規表現において特別な意味を持つ文字の一種であり、一致したオブジェクト内で先頭の文字 (つまり、メタキャラクターの前の文字) がどのように表示されるかを記述するために使用されます。
メタキャラクター自体は単一の文字ですが、異なるまたは同一のメタキャラクターを組み合わせて大きなメタキャラクターを形成することができます。
メタキャラクター:
中括弧: 中括弧は、一致するメタキャラクターの出現数を正確に指定するために使用されます。たとえば、「/pre{1,5}/」は、一致するオブジェクトが「pre」、「pree」、「preeeee」であることを意味します。 「pr」の後に「e」が1~5個の文字列で表示されます。または、「/pre{,5}/」は、pre が 0 回から 5 回まで出現することを意味します。 プラス記号: 「+」文字は、メタキャラクターが 1 回以上出現する前の文字と一致するために使用されます。たとえば、「/ac+/」は、一致するオブジェクトが、「a」の後に 1 つ以上の「c」が続く「act」、「account」、「acccc」などの文字列である可能性があることを意味します。 「+」は「{1,}」と同等です。 アスタリスク: 「*」文字は、メタキャラクターの前に出現する 0 個以上の文字と一致するために使用されます。たとえば、「/ac*/」は、一致するオブジェクトが「app」、「acp」、「accp」、および「a」の後に 0 個以上の「c」が出現するその他の文字列である可能性があることを意味します。 「*」は「{0,}」と同等です。 疑問符: 「?」文字は、メタキャラクターの前に出現する 0 個または 1 個の文字と一致するために使用されます。たとえば、「/ac?/」は、一致するオブジェクトが「a」、「acp」、または「acwp」であることを意味します。このように、「a」の後に 0 個または 1 個の「c」文字列が表示されます。 「?」は正規表現、つまり「貪欲モード」でも非常に重要な役割を果たします。他に 2 つの非常に重要な特殊文字があります:「[ ]」。
たとえば、「/[az]/」は単一の文字「a」または「z」に一致します。
上記の式を「/[ a-z」に変更すると、 ]/" の場合、"a"、"b" などの任意の小文字 1 文字と一致させることができます。
「[]」に「^」が含まれている場合は、この式が「[]」に含まれる文字と一致しないことを意味します。たとえば、「/[^a-z]/」は小文字と一致しません。そして、正規表現には「[]」のいくつかのデフォルト値が与えられます:
[:alpha:]: 任意の文字に一致 [:alnum:]: 任意の文字および数字に一致 [:digit:]: 任意の数字に一致 [:space : ]: スペース文字と一致します [:upper:]: 任意の大文字と一致します [: lower:]: 任意の小文字と一致します [:punct:]: 任意の句読点と一致します [:xdigit:]: 任意の 16 進数と一致しますさらに、エスケープ記号「」でエスケープされた後の次の特殊文字の意味は次のとおりです:
s: 単一のスペース文字と一致します。 S: 単一のスペース文字を除くすべての文字と一致するために使用されます。 d: 0 ~ 9 の数値を照合するために使用され、「/[0-9]/」と同等です。 w: 文字、数字、またはアンダースコア文字と一致するために使用されます。「/[a-zA-Z0-9_]/」と同等です。 W: w に一致しないすべての文字と一致するために使用され、「/[^a-zA-Z0-9_]/」と同等です。 D: 10 進数以外の数字と一致するために使用されます。 .: 改行文字を除くすべての文字と一致するために使用されます。修飾子「s」で変更すると、「.」は任意の文字を表すことができます。上記の特殊文字を使用すると、複雑なパターン マッチングを簡単に表現できます。たとえば、「/d0000/」は上記の正規表現を使用して、10,000 を超えて 100,000 未満の範囲の整数文字列と一致させることができます。
位置決め文字:
位置決め文字は、正規表現におけるもう 1 つの非常に重要なタイプの文字であり、その主な機能は、一致するオブジェクト内の文字の位置を記述することです。
^: 一致するパターンが一致するオブジェクトの先頭に現れることを示します (「[]」とは異なります) $: 一致するパターンが一致するオブジェクトの最後に現れることを示します スペース: 一致するパターンが一致するオブジェクトの先頭に現れることを示します先頭と末尾の境界 1: "/^he/": hello、height などの "he" 文字で始まる文字列と一致します。 "/he$/": "he" で終わる文字列と一致します。 she などの文字。「/he/」: スペースで始まり、^ と同じ効果があります。「/he /」: スペースで終わり、^ と同じ効果があります。 $、he で終わる文字列に一致します。 "/^he $/": 文字列「he」にのみ一致することを示します。括弧:
正規表現の一致に加えて、括弧「()」を使用して必要な情報を記録し、保存し、後続の式で読み取ることもできます。例:
/^([a-zA-Z0-9_-]+)@([a-zA-Z0-9_-]+)(.[a-zA-Z0-9_-])$/
メールアドレスのユーザー名とメールアドレスのサーバーアドレスを記録しておきます(username@server.comなどの形式)。記録した文字列を後で読みたい場合は、使用するだけです。 「エスケープ文字 + 記録された順序」を読み取ります。
たとえば、「1」は最初の「[a-zA-Z0-9_-]+」に相当し、「2」は 2 番目の「[a-zA- Z0-9_-]+」に相当します。 "3 "3 つ目です (.[a-zA-Z0-9_-])。ただし、PHP では、「」はエスケープする必要がある特殊文字であるため、PHP 式では「1」を「\1」と記述する必要があります。
その他の特殊記号:
: or 記号「|」は PHP の or と同じですが、PHP では 2 つの「||」ではなく 1 つの「|」です。これは、特定の文字または別の文字列である可能性があることを意味します。たとえば、「/abcd|dcba/」は「abcd」または「dcba」に一致する可能性があります。
貪欲モード:
メタキャラクターで前述したように、「?」も重要な役割を果たします、つまり「貪欲モード」とは何ですか?
たとえば、文字「a」で始まり文字「b」で終わる文字列を一致させたいが、一致する必要がある文字列には「a」の後に「b」が多数含まれている場合、「」のようになります。 a bbbbbbbbbbbbbbbbbb" の場合、正規表現は最初の "b" または最後の "b" に一致しますか?貪欲モードを使用する場合は、最後の「b」が照合されます。それ以外の場合は、最初の「b」のみが照合されます。
greedy モードを使用した式は次のとおりです:
/a.+?b/
/a.+b/U
greedy モードを使用しない式は次のとおりです:
/a.+b/
修飾子 U が使用されます上記、詳細は以下のセクションを参照してください。
修飾子:
正規表現内の修飾子は、正規表現の多くの特性を変更して、正規表現をニーズにより適したものにすることができます (注: 修飾子では大文字と小文字が区別されます。つまり、「e」は「E」と等しくありません) )。正規表現の修飾子は次のとおりです:
i: 修飾子に「i」を追加すると、正規表現では大文字と小文字が区別されなくなります。つまり、「a」と「A」は同じになります。 m: デフォルトの通常の開始 "^" と終了 "$" は通常の文字列のみに使用されます。修飾子に "m" を追加すると、開始と終了は文字列の各行を参照します。各行の先頭は次のとおりです。 「^」、「$」で終わります。 s: 修飾子に「s」を追加すると、デフォルトの「.」は改行文字を除く任意の文字になることを意味します。 x: この修飾子を追加すると、エスケープされていない限り、式内の空白文字は無視されます。 e: この修飾子は置換の場合にのみ役立ちます。つまり、置換の PHP コードとして使用されます。 A: この修飾子を使用する場合、式は一致する文字列の先頭である必要があります。たとえば、「/a/A」は「abcd」と一致します。 E: 「m」とは異なり、この修飾子が使用される場合、「$」は改行文字の前ではなく、文字列の絶対的な末尾と一致します。このモードはデフォルトでオンになります。 U: クエスチョンマークと同じ機能があり、「貪欲モード」を設定するために使用されます。PCRE 関連の正規表現関数:
PHP の Perl 互換正規表現は、パターン マッチング、置換、数値マッチングなどに分かれた複数の関数を提供します:
1. preg_match:
関数形式: int preg_match(string pattern, string subject, array [matches]);
この関数は、文字列内のパターン式を使用して一致します。[regs] が指定された場合、文字列は [regs][0] に記録され、[regs] [1] が最初の文字列を表します。括弧「()」を使用して記録され、[regs][2] は記録された 2 番目の文字列を表します。 preg は、一致するパターンが文字列内で見つかった場合は "true" を返し、それ以外の場合は "false" を返します。
2. preg_replace:
関数形式:mixed preg_replace(mixed pattern,mixed replace,mixed subject);
この関数は、式パターンに一致する文字列内のすべての文字列を式置換で置き換えます。置換にパターンの一部の文字を含める必要がある場合は、「()」を使用してそれを記録できます。置換には「1」を使用するだけで済みます。
3. preg_split:
関数の形式: array preg_split(string pattern, string subject, int [limit]);
この関数は、split が単純な正規表現を使用してマッチングを分割できることだけが異なります。一方、preg_split は完全な Perl 互換の正規表現を使用します。 3 番目のパラメーター制限は、返される修飾された値の数を表します。
4. preg_grep:
関数の形式: array preg_grep(string pattern, array input);
この関数は基本的に preg_match と同じですが、preg_grep は指定された配列入力内のすべての要素と一致し、新しい配列を返すことができます。
メールアドレスの形式が正しいか確認してください
PHP
function emailIsRight( $email ) {
if ( preg_match ( " ^[_.0-9a-z-]+@ ([0 -9a-z][0-9a-z-]+.)+[a-z]{2,3}$ " , $email )) {
return 1 ;
}
return 0 ;
}
if (emailIsRight( ' y10k@963.net ' )) echo ' 正しい
if ( ! emailIsRight( ' y10k@fffff ' )) echo ' 不正解 '