例を見て正規表現を学びましょう
まず、2 つの特殊文字「^」と「$」を見てみましょう。これらはそれぞれ文字列の先頭と末尾を一致させるために使用されます。以下に例を示します。 2 つの特殊文字「^」と「$」に注目してください。これらはそれぞれ文字列の先頭と末尾を一致させるために使用されます。
"^The": 「The」で始まる文字列と一致します。
"of speech$": "of Peace" で終わる文字列と一致します。
"^abc$": abc で始まり abc で終わる文字列と一致します。実際には、abc のみが一致します。 : 通知を含む文字列と一致します。
前述した 2 つの文字 (最後の例) を使用しない場合、パターン (正規表現) はテスト対象の文字列のどこにでも出現する可能性があることがわかります。彼をどちらかの側に閉じ込めないでください。
「*」、「+」、「?」という文字もあり、それぞれ「0 個以上」、「1 個以上」を表します。 、および「0 または 1」 いくつかの例を示します:
"ab*": 文字列 a と 0 個以上の b で構成される文字列 ("a"、"ab"、"abbb" など) に一致します。
"ab+": 上記と同じですが、少なくとも 1 つの b ("ab"、"abbb" など)
"ab?": 0 または 1 つの b と一致します。 : 1 つまたは 0 a と 1 つ以上の b で終わる文字列と一致します。
"ab{2}" のように、中括弧内に表示される文字の数を制限することもできます。 a の後に 2 つの b ( 1 つ少なくありません) ("abb");
"ab{2,}": 少なくとも 2 つの b ("abb"、"abbbb" など);
"ab{ 3,5}": 2 -5 b("abbb"、"abbbb"、または "abbbbb")。
同様に、常に指定する必要があることにも注意してください (つまり、"{0,2}" ではありません)。 「*」、「+」、および「?」は、次の 3 つの範囲注釈「{0,}」、「{1,}」、および「{0,1}」と同じであることに注意してください。
ここで、括弧内に特定の数の文字を入力します。例:
"a(bc)*": a の後に 0 または 1 つの "bc" が続くものと一致します
"a(bc){1,5} ": 1 ~ 5 "bc."
OR 演算に相当する文字 '│' もあります。
"hi│hello": "hi" または "hello" を含む文字列と一致します
"; │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] 中央の '-' は機能します。
完全を期すために、照合シーケンス、文字クラス、およびただし、これらの点についてはあまり詳しく説明しません。詳細については、正規表現のマニュアル ページを参照してください。パターン 通貨金額の入力を照合するには
さて、ここで学んだことを使って何か役に立つことをしてみます。入力情報が金額を表す数値かどうかをチェックする照合パターンを構築します。金額を表すには 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})?$
Don 't 空白文字列の入力を許可したい場合は、プラス記号 '+' を乗算記号 '*' に置き換えることができます (なぜですか?)。また、バックスラッシュ '' がエラーの原因となる可能性があることも忘れないでください。 PHP 文字列 (非常に一般的なエラー)。文字列を検証できるようになったので、すべてのカンマ str_replace(",", "", $money) を削除し、型を double として扱うことができるので、それを使って計算できるようになります。
電子メールをチェックするための正規表現の構築
電子メール アドレスを検証する方法について引き続き説明します。完全な電子メール アドレスには 3 つの部分があります: POP3 ユーザー名 ('@' の左側すべて)、'@'、サーバー名 (残りの部分)、ユーザー名には大文字、小文字、アラビア数字、ピリオド (「.」)、マイナス記号 (「-」)、およびアンダースコア (「_」) を含めることができます。ただし、サーバー名もこの規則に準拠します。
ユーザー名をピリオドで始めることも、ピリオドで終わることもできません。また、間に少なくとも 1 文字のピリオドを入れることもできません。ユーザー名にピリオドを追加します:
^[_a-zA-Z0-9-]+$
ピリオドの存在はまだ許可されていません:
^[_a-zA-Z0-] 9-]+ (.[_a-zA-Z0-9-]+)*$
上記は、「少なくとも 1 つの標準文字 (. 臨時記号を除く) で始まり、その後にドットで始まる 0 個以上の文字列が続く」ことを意味します。
少し簡略化するために、 ereg() の代わりに eregi() を使用できます。 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 ));