ホームページ >バックエンド開発 >PHPチュートリアル >さまざまな正規表現の接尾辞の意味と解決策について質問する
さまざまな正規表現の接尾辞の意味について質問したいです
PHP の正規表現の接尾辞の意味については、今のところよくわかりません。 /u が非貪欲一致を意味する、ということだけは知っています。 i は大文字と小文字を無視することを意味し、/s は " . " を改行文字と一致させることができます。ただ、他の接尾語の意味が分からないので体系的に質問したいので、この分野の先輩方にアドバイスを頂ければと思います。
-----解決策--------------------------------
PHP での使用 Perl と互換性のある
の正規表現 ---------------------------------- ------------- -
出典: PHP Power Online
1 前書き
PHP は、通常、何らかの種類の CGI を取得するために、Web のバックグラウンド CGI 開発で広く使用されています。ユーザー データの後に結果を表示しますが、ユーザーが入力した場合、データが正しくない場合に問題が発生します。たとえば、誰かの誕生日が「2 月 30 日」である場合です。では、夏休みが正しいかどうかはどのように確認すればよいのでしょうか? 正規表現のサポートが PHP に追加され、データ照合を非常に便利に実行できるようになりました。
2 正規表現とは:
簡単に言えば、正規表現はパターンの一致と置換に使用できる強力なツールです。正規表現の痕跡は、Perl や PHP スクリプト言語など、UNIX/LINUX システムに基づくほぼすべてのソフトウェア ツールで見つかります。さらに、クライアント側のスクリプト言語である JavaScript も正規表現をサポートしています。現在、正規表現は一般的な概念およびツールとなっており、さまざまな技術担当者によって広く使用されています。
Linux の Web サイトには次のような記述があります。「Linux 愛好家に何が一番好きかを尋ねると、彼はおそらく正規表現と答えるでしょう。面倒なインストールと構成のほかに、最も恐れていることは何かと尋ねると、彼はこう答えます。」正規表現について話します。 "
上で述べたように、正規表現は非常に複雑で怖く見えます。ほとんどの PHP 初心者はこれをスキップして以下の学習を続けるでしょうが、PHP の正規表現にはパターン マッチングを使用して次の文字列を見つけることができます。条件を満たす、文字列が条件を満たすかどうかを判断する、または条件を満たす文字列を指定された文字列に置き換える 学習しないのはもったいないです...
3 通常の基本構文。式:
正規表現は、区切り文字、式、修飾子の 3 つの部分に分かれています。
区切り文字には、特殊文字 (「/ !」など) を除く任意の文字を使用できます。一般的に使用される区切り文字は「/」です。この式は、いくつかの特殊文字 (特殊文字の詳細については以下を参照) と特殊文字列以外で構成されます。たとえば、「[a-z0-9_-]+@[a-z0-9_-.]+」は、単純な電子メール文字列。修飾子は、特定の機能/モードをオンまたはオフにするために使用されます。以下は完全な正規表現の例です:
/hello.+?hello/is
上記の正規表現 "/" は区切り文字であり、2 つの "/" の間にある正規表現は式です。 2 つの「/」の後の文字列「is」は修飾子です。
式に区切り文字がある場合は、「/hello.+?/hello/is 」などのエスケープ記号「 」を使用する必要があります。エスケープ記号は区切り文字として使用されるだけでなく、特殊文字も実行できます。文字で構成されるすべての特殊文字は、すべての数字を表す「d」などでエスケープする必要があります。
4 正規表現の特殊文字:
正規表現の特殊文字は、メタ文字、位置決め文字などに分類されます。
メタキャラクターは、正規表現において特別な意味を持つ文字の一種であり、一致したオブジェクト内で先頭の文字 (つまり、メタキャラクターの前の文字) がどのように表示されるかを記述するために使用されます。メタキャラクター自体は単一の文字ですが、異なるまたは同一のメタキャラクターを組み合わせて大きなメタキャラクターを形成することができます。
メタキャラクター:
中括弧: 中括弧は、一致するメタキャラクターの出現数を正確に指定するために使用されます。たとえば、「/pre{1,5}/」は、一致するオブジェクトが「pre」、「pree」である可能性があることを意味します。 "、preeeee" を指定すると、"pr" の後に 1 ~ 5 個の "e" が表示されます。または、「/pre{,5}/」は、pre が 0 回から 5 回まで出現することを意味します。
プラス記号: 「+」文字は、メタキャラクターが 1 回以上出現する前の文字と一致するために使用されます。たとえば、「/ac+/」は、一致するオブジェクトが「act」、「account」、「acccc」などであることを意味します。1 つ以上の「c」文字列が「a」の後に表示されます。 「+」は「{1,}」と同等です。
アスタリスク: 「*」文字は、メタキャラクターの前に出現する 0 個以上の文字と一致するために使用されます。たとえば、「/ac*/」は、一致するオブジェクトが「app」、「acp」、「accp」、および「a」の後に 0 個以上の「c」が出現するその他の文字列である可能性があることを意味します。 「*」は「{0,}」と同等です。
疑問符: 「?」文字は、メタ文字の前に出現する 0 個または 1 個の文字と一致するために使用されます。たとえば、「/ac?/」は、一致するオブジェクトが「a」、「acp」、「acwp」である可能性があることを意味し、0 または 1 つの「c」文字列が「a」の後に表示されます。 「?」も正規表現、つまり「貪欲モード」において非常に重要な役割を果たします。
非常に重要な特殊文字が 2 つあります:「[ ]」。たとえば、上記の式を "/[a-z]/" に変更すると、「/[az]/」は単一の文字「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 つの非常に重要なタイプの文字であり、その主な機能は、一致するオブジェクト内の文字の位置を記述することです。
^:一致するパターンが一致するオブジェクトの先頭に現れることを示します(「[]」とは異なります)
$:一致するパターンが一致するオブジェクトの最後に現れることを示します
スペース:一致するオブジェクトであることを示します先頭と末尾の 2 つの境界のいずれかに一致するパターンが表示されること。
"/^he/ ": hello、height など、「he」文字で始まる文字列と一致する可能性があります。
" /he$/ ": can 「he」文字で終わる文字列、つまり彼女などと一致します。