例を見て正規表現を学びましょう
まず、2 つの特殊文字「^」と「$」を見てみましょう。これらはそれぞれ文字列の先頭と末尾を一致させるために使用されます。
まず、次の例を見てみましょう。 2 つの特殊文字「^」と「$」に注目してください。これらはそれぞれ文字列の先頭と末尾を一致させるために使用されます。
"^The": "The" で始まる文字列と一致します。 destroy$": 「of Peace」で終わる文字列と一致します。
"^abc$": abc で始まり abc で終わる文字列と一致します。実際には、abc のみが一致します。
"notice": Notice を含む文字列と一致します。 ;
前述した 2 つの文字 (最後の例) を使用しない場合、つまり、テスト対象の文字列のどこにでもパターン (正規表現) を出現させることができ、それを使用しないことがわかります。側面。
「*」、「+」、「?」という文字もあり、それぞれ「0 回以上」「1 回以上」を表します。いくつかの例を次に示します:
"ab*": a と 0 個以上の b で構成される文字列 ("a"、"ab"、"abbb" など) と一致します。
" ab+": 上記と同じですが、少なくとも 1 つの b ("ab"、"abbb" など) が含まれます。
"ab?": 0 または 1 つの b と一致します。
"a?b+$": 1 つまたは a と一致します。 0 a と 1 つ以上の b で終わる文字列。
中括弧内に表示される文字の数を制限することもできます。例:
"ab{2}": a の後に 2 つの b が続く (a 以下は不可) ("abb ");
"ab{2,}": さらに少なくとも 2 つの b("abb"、"abbbb" など);
"ab{3,5}": 2-5 b("abbb", " abbbb"、または "abbbbb")。
常に指定する必要があることにも注意してください (つまり、"{,2}" ではなく "{0,2}")。同様に、'*'、' にも注意する必要があります。 +' および '?' は、それぞれ次の 3 つの範囲注釈 "{0,}"、"{1,}"、および "{0,1}" と同じです。
ここで、括弧内に特定の数の文字を入力します。例:
"a(bc)*": a の後に 0 または 1 つの "bc" が続くものと一致します。
"a(bc){1,5}": 1 から 5 "bc."
OR 演算に相当する 1 つの文字 '│' もあります:
"hi│hello": "hi" または "hello" を含む文字列に一致します
"(b│cd)ef" : "bef" または "cdef" を含む文字列と一致します。
"(a│b)*c": 複数の (0 を含む) a または b とそれに続く c 文字列を含む文字列と一致します。すべての単一文字:
"a.[0-9]": a の後に文字が続き、その後に数字が続きます (このような文字列を含む文字列が一致します。この括弧は将来省略されます)
"^.{3 }$": 3 文字で終わります。角括弧で囲まれた内容は 1 つの文字にのみ一致します
"[ab]": 1 つの a または b に一致します (および "a │b" も同様);
"[a-d]": 「a」から「d」までの 1 つの文字と一致します (「a│b│c│d」および「[abcd]」と同じ効果)
"^[ a-zA-Z]": 文字で始まる文字列と一致します。
"[0-9]%": x% を含む文字列と一致します
",[a-zA-Z0-9]$": カンマと数字または文字で終わる文字列と一致します
必要な文字をリストすることもできます括弧で囲む必要はありません。括弧内の先頭として '^' を使用する必要があります (つまり、「%[^a- zA-Z]%」は、内側に非文字が含まれる 2 つのパーセント記号を含む文字列と一致します)。
説明できるようにするために、「^.[$()│*+?{」が特別な意味を持つ文字として使用される場合、これらの文字の前に '' を追加する必要があり、php3 では次のようにする必要があります。たとえば、正規表現 "($│?[0-9]+" は ereg( "($│?[0-9]+", $str) () と呼ぶ必要があります。 php4 でも同じかどうかはわかりません)
角括弧内の文字はこの規則の例外であることを忘れないでください。角括弧内のすべての特殊文字 ('') は、その特殊文字を失います。また、regx マニュアルには、「リストに ']' が含まれる場合、それを最初の文字として置くのが最善です。」リスト (おそらく '^' の後ろ) に '-' が含まれる場合は、範囲の先頭または末尾、あるいは最初の文字に置くのが最善です。 2 つの終了点 (例: [a-d-0-9] と真ん中の「-」は有効です
完全を期すために、照合シーケンス、文字クラス、および等価クラスについては説明しません。これらの側面については、あまり詳しく説明する必要はありません。詳細については、正規表現の man ページを参照してください。
通貨金額の入力に一致するパターンを構築する方法
さて、ここで学んだことを使用します。 役に立つもの: 一致するパターンを構築します。入力された情報がお金を表す数字であるかどうかを確認します。金額を表すには 4 つの方法があると思います: "10000.00" と "10,000.00"、または小数部なしの "10000" と "10,000" では、この一致パターンの構築を開始しましょう:
^[1-9]。 [ 0-9]*$
これは、すべての変数が 0 以外の数値で始まる必要があることを意味します。ただし、これは、単一の「0」ではテストに合格できないことも意味します。 解決策は次のとおりです。
^(0│[1 -9] [0-9]*)$
「0 と 0 で始まらない数字のみが一致する」。数字の前に負号を付けることもできます:
^(0│-?[1-9][0- 9]*)$
これは次のとおりです: 「0、またはその前に負号が付いている可能性がある 0 で始まる数字。」 さて、ここではあまり厳密に考えずに、0 から始まることを許可します。負符号を削除しましょう。コインを表すときにこれを使用する必要がないため、小数部分に一致するパターンを指定します:
^[0-9]+(.[0-9]+)?$
これは一致する文字列を意味します。少なくとも 1 つのアラビア数字で始まる必要があります。ただし、上記のパターンでは「10.」が一致せず、「10」と「10.2」のみが受け入れられることに注意してください (理由はわかりますか)
^[0-9]+ ( .[0-9]{2})?$
上記では、小数点以下 2 桁でなければならないと指定しましたが、これが厳しすぎると思われる場合は、次のように変更できます。
^[0-9] +(.[0-9 ]{1,2})?$
これにより、小数点の後に 1 文字または 2 文字を追加できるようになり、読みやすくするために (3 桁ごとに) カンマを追加できます。次のように表現できます。 ^[0- 9]{1,3}(,[0-9]{3})*(.[0-9]{1,2})?$
プラス記号「+」を忘れないでください空白文字列の入力を許可したい場合は、乗算記号 '*' に置き換えることができます (なぜですか?) また、バックスラッシュ '' が PHP 文字列でエラーを引き起こす可能性があることも忘れないでください (よくある間違いです)。文字列を検証して、すべてのカンマ str_replace(",", "", $money) を削除し、型を double として扱い、それを使用して数学的計算を行うことができます
電子メールをチェックするための正規表現を構築しましょう
完全な電子メール アドレスには、POP3 ユーザー名 (「@」の左側すべて)、「@」、サーバー名 (残り) の 3 つの部分があります。ユーザー名には大文字と小文字を含めることができます。アラビア数字、ピリオド ('.')、マイナス記号 ('-')、およびアンダースコア ('_') も、もちろんアンダースコアを除き、このルールに準拠します。ユーザー名にピリオドを使用することはできません。サーバーでも同様であり、間に少なくとも 1 文字のピリオドを入れることはできません。次に、ユーザー名に一致するパターンを記述する方法を見てみましょう。 zA-Z0-9-] +$
ピリオドの存在はまだ許可されていません:
^[_a-zA-Z0-9-]+(.[_a-zA-Z0-9-]+) *$
上記の意味 つまり、「少なくとも 1 つの正規文字 (. 予期せぬ文字を除く) で始まり、その後にドットで始まる 0 個以上の文字列が続きます。」
少し単純化するために、eregi を使用できます。 ereg().eregi() の代わりに () 大文字と小文字が区別されないため、「a-z」と「A-Z」の 2 つの範囲を指定する必要はありません。指定する必要があるのは 1 つだけです:
^[_a-z0-9-] +(.[_a-z0-9- ]+)*$
の後のサーバー名は同じですが、アンダースコアを削除する必要があります:
^[a-z0-9-]+(.[a-z0-9 -]+)*$
完了です。「@」を使用して 2 つの部分を接続します:
^[_a-z0-9-]+(.[_a-z0-9-]+)*@[a-z0- 9-]+(.[a-z0-9 -]+)*$
これは完全なメール認証照合モードです。
eregi('^[_a-z0-9-]+(.[_a-z0 -9-]+)*@[a -z0-9-]+(.[a-z0-9-]+)*$ ',$eamil)
メールかどうかを取得できます。
正規表現のその他の使用法
文字列の抽出
ereg() と eregi() には、正規表現を使用して文字列の一部を抽出できる機能があります (具体的な使用法についてはマニュアルを参照してください)。パス/URL からファイル名を抽出します – 次のコードが必要です:
ereg("([^/]*)$", $pathOrUrl, $regs);
高度な置換
ereg_replace () と eregi_replace() も非常に便利です。区切られたすべての負符号をカンマで置き換えたい場合:
ereg_replace("[ ]+", ",", trim($str));
以上、PHPの正規表現をサンプルを見ながら学ぶ方法を内容も含めて紹介しましたが、PHPチュートリアルに興味のある友人の参考になれば幸いです。