ホームページ >バックエンド開発 >PHPチュートリアル >PHP の POSIX 正規表現学習ノート_PHP チュートリアル

PHP の POSIX 正規表現学習ノート_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-13 09:57:14984ブラウズ

PHP学習メモPOSIX正規表現

PHP の POSIX 正規表現学習ノート_PHP チュートリアル

1 基礎知識

正規表現は、テキスト内のパターンを記述する方法です。これまで使用してきた正確なリテラル一致も正規表現です。たとえば、先ほどは「shop」や「delivery」などの正規表現用語を検索しました。

PHP では、正規表現のマッチングは、等価比較ではなく、strstr() マッチングに似ています。これは、文字列内の特定の位置 (指定されていない場合) の別の位置と一致するため、文字列内の任意の位置に一致する可能性があります。文字列。たとえば、文字列「shop」は正規表現「shop」と一致します。正規表現「h」、「ho」などとも一致します。

文字を正確に一致させるだけでなく、特殊文字を使用して式のメタ意味を指定することもできます)。たとえば、特殊文字を使用すると、文字列の先頭または末尾に存在する必要があるパターン、パターンのその部分を繰り返してもよい、またはパターン内の文字が特定の種類に属することを指定できます。さらに、特殊文字の出現によって照合することもできます。次に、これらの変更について 1 つずつ説明します。

2文字セットとクラス

文字セットを使用すると、完全一致よりも強力な正規表現をすぐに提供できます。文字セットは、特定の種類の文字と一致させるために使用できます。実際、文字セットは一種のワイルドカード文字です。

まず、ワイルドカード文字として文字を使用して、改行文字 n) を除く任意の文字を置き換えることができます。たとえば、正規表現:


.at


「猫」、「土」、「マット」などと合わせることができます。通常、このワイルドカード マッチングは、オペレーティング システムのファイル名マッチングに使用されます。

ただし、正規表現を使用すると、一致させる文字の種類をより具体的に指定したり、文字が属するセットを指定したりできます。前の例では、正規表現は「cat」と「mat」に一致しましたが、「#at」にも一致する可能性があります。 a から z までの文字に制限したい場合は、次のように指定できます:


[a-z]at

角括弧 []) で囲まれたものはすべて文字クラス、つまり一致した文字が属する文字のセットです。角括弧内の式は 1 文字のみと一致することに注意してください。

次のようなコレクションをリストできます:


[あいおう]


は母音子音を表現するために使用できます。

前と同様に、ハイフンまたは範囲のセットを使用して範囲を記述することもできます。


[a-zA-Z]


この範囲セットは、大文字と小文字を表します。

さらに、セットを使用して、文字が特定のセットに属さないことを示すこともできます。例:


[^a-z]


は、a と z の間にない任意の文字と一致するために使用できます。キャレット ^) が角括弧で囲まれている場合は、「いいえ」を意味します。この記号が角括弧の外側で使用されている場合は、別の意味を意味しますが、これについては後ほど詳しく説明します。

3 リピート

多くの場合、読者は、特定の文字列または文字クラスが複数回出現することを示したいと思うでしょう。正規表現では代わりに 2 つの特殊文字を使用できます。 「*」はパターンが 0 回以上繰り返し可能であることを示し、「+」はパターンが 1 回以上繰り返し可能であることを示します。これら 2 つのシンボルは、処理対象の式の後に配置する必要があります。

例:


[[:alnum:]]+


は「少なくとも 1 つのアルファベット文字」を意味します。

4 部分式

多くの場合、式を複数の部分式に分割すると、たとえば「これらの文字列の少なくとも 1 つが完全に一致する必要がある」ことを意味する場合に便利です。これは、数式と同じように括弧を使用して行うことができます。

例:


(とても)*大きい


「大きい」、「非常に大きい」、「非常に大きい」などに一致します。

5 部分式数

中括弧 {}) で囲まれた数値式を使用して、コンテンツの繰り返しを許可する回数を指定できます。正確な繰り返し数 {3} (3 回繰り返すことを意味します)、または繰り返しの範囲 {2, 4} (2 ~ 4 回繰り返すことを意味します)、または繰り返しの範囲 {2,} を指定できます。少なくとも 2 回繰り返すことを意味します)。

例:


(とても){1,3}


は、「非常に」、「非常に非常に」、「非常に非常に」と一致することを意味します。

6 文字列の先頭または末尾に位置します

[a-z] パターンは、小文字のアルファベットを含む任意の文字列と一致します。文字列に文字が 1 つだけ含まれているか、長い文字列全体に一致する文字が 1 つだけ含まれているかは関係ありません。

特定の部分式が最初にあるのか、最後にあるのか、あるいは両方の位置にあるのかを判断することもできます。これは、検索している単語のみが文字列内に表示され、他の単語が表示されないことを確認したい場合に便利です。

キャレット ^) は正規表現の先頭に使用され、部分文字列が検索される文字列の先頭に出現する必要があることを示します。文字「$」は正規表現の末尾に使用され、部分文字列が出現する必要があることを示します。文字列の最後に表示されます。

たとえば、次は文字列の先頭の bob に一致します:


^ボブ


このパターンは、文字列の最後に com が表示される文字列と一致します:


com$


最後に、このパターンは、a と z の間に 1 文字だけを含む文字列と一致します。


^[a-z]$


7支店

正規表現で垂直バーを使用して選択範囲を表すことができます。たとえば、com、edu、または net に一致させたい場合は、次のような式を使用できます:


com|edu|net


8 特殊文字と一致する

このセクションで前述した .、{、$ などの特殊文字と一致させたい場合は、それらの前にバックスラッシュを追加する必要があります)。バックスラッシュを一致させたい場合は、2 つのバックスラッシュを使用して表現する必要があります\)。

PHP では、正規表現パターンを一重引用符で囲む必要があります。正規表現に二重引用符を使用すると、不必要な複雑さが生じます。 PHP では、バックスラッシュなどの特殊文字をエスケープするためにバックスラッシュも使用します。

パターン内のバックスラッシュを一致させたい場合は、2 つのバックスラッシュを使用して、それがエスケープ文字ではなくバックスラッシュ文字であることを示す必要があります。

また、同じ理由で、二重引用符で囲まれた PHP 文字列でバックスラッシュ文字を使用する場合は、2 つのバックスラッシュを使用する必要があります。この要件の結果、バックスラッシュ文字を含む正規表現を表す PHP 文字列には 4 つのバックスラッシュが必要になるため、これは混乱を招く可能性があります。 PHP インタープリタは、これら 4 つのバックスラッシュを 2 として解釈します。次に、正規表現インタープリターによって 1 つに解析されます。

$ 記号は、二重引用符で囲まれた PHP 文字列および正規表現の特殊文字でもあります。 $ 文字がパターン内で一致するには、「\$」を使用する必要があります。この文字列は二重引用符で囲まれているため、PHP インタープリターはこれを $ として解析し、正規表現インタープリターは $ 文字として解析します。

9 スマートフォームで申請

正規表現は、スマート フォーム アプリケーションで少なくとも 2 つの用途があります。最初の用途は、顧客のフィードバックから特定の名詞を見つけることです。正規表現を使用すると、もう少し賢く実行できます。文字列関数を使用して、「ショップ」、「顧客サービス」、または「小売」を一致させたい場合は、3 つの異なる検索を実行する必要があります。正規表現を使用すると、次のように 3 つすべてを同時に照合できます:


ショップ|カスタマーサービス|小売


2 番目の使用法は、プログラムでユーザーの電子メール アドレスを検証することです。これには、電子メール アドレスの標準形式を正規表現でエンコードする必要があります。この形式には、いくつかの数字または句読点が含まれ、その後に記号「@」、文字または数字と文字で構成される文字列、その後に「.」ピリオドが続き、その後にハイフン文字列で構成される文字または数字が続きます。文字列の終わりまでドット。次のようにエンコードされます:


^[a-zA-Z0-9_-.]+@[a-zA-Z0-9-]+.[a-zA-Z0-9-.]+$


部分表現 ^[a-zA-Z0-9_-.]+ は、「少なくとも 1 つの文字、数字、アンダースコア、ハイフン、ピリオド、またはこれらの文字の組み合わせで始まる文字列」を意味します。文字クラスの先頭または末尾でドットを使用すると、そのドットは特別なワイルドカードの意味を失い、単なるドット文字になることに注意してください。

記号「@」は文字「@」と一致します。

部分式 [a-zA-Z0-9-]+ は、英数字とハイフンを含むホスト名に一致します。ハイフンは角括弧内の特殊文字であるため、削除したことに注意してください。

文字の組み合わせ「.」は「.」文字と一致します。文字クラスの外でドットを使用しているため、ドット文字と一致するようにエスケープする必要があります。

部分式 [a-zA-Z0-9-.]+$ は、文字、数字、ハイフン、および必要に応じて文字列の終わりまでのピリオドを含むドメイン名の残りの部分と一致します。

無効な電子メール アドレスもこの正規表現に一致する場合があることを見つけるのは難しくありません。無効なメールをすべて見つけることはほぼ不可能ですが、分析することで状況は改善されます。この表現はさまざまな方法で洗練することができます。たとえば、すべての有効なトップレベル ドメイン TLD をリストできます)。 1% の有効なデータを除外する可能性のある検証関数は、10% の無効なデータを許可する検証関数よりも面倒であるため、特定のオブジェクトを制限する場合は注意してください。

「毎週1冊読めば、1年で50冊読めます」 さあ。 。 。 諦める理由をたくさん考えすぎないでください。



www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/984390.html技術記事 PHP学習メモ POSIX正規表現1 基礎知識 正規表現とは、テキストのパターンを記述する方法です。これまでのところ、以前に使用した正確なテキストは一致します...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。