"^The": "The" で始まる文字列と一致します。
"of death$": "of speech" で終わる文字列と一致します。 "^abc$": で始まる文字列と一致します。 abc と abc で終わる実際には、abc のみが一致します。
: Notice を含む文字列と一致します。前述の 2 つの文字を使用するとわかります。 (最後の例)、これは、テスト対象の文字列内のどこにでもパターン (正規表現) を出現させることができ、両側にロックしていないことを意味します。
いくつかの文字「*」、「 」、および「?」もあり、これらはそれぞれ「0 個以上」、「1 個」を表します。以下にいくつかの例を示します:
"ab*": 文字列 a と 0 個以上の b ("a"、"ab"、"abbb" など) に一致します。 .);
"ab ": 少なくとも 1 つの b ("ab"、"abbb" など);
"ab?" と一致します。 one b;
"a?b $": 1 または 0 a と 1 つ以上の b で終わる文字列と一致します。
"ab{2}": a の後に 2 つの b (それ以上) ("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 演算に相当する文字 '│' もあります:
"hi│hello" : 「hi」または「hello」を含む文字列と一致します。
「(b│cd)ef」: 「bef」または「cdef」を含む文字列と一致します。 *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 % string
",[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 以外の数値で始まる必要があることを意味しますが、これは 1 つの「0」ではテストに合格できないことも意味します。解決策:
^(0│[1-9][0-9]*)$
「0 と 0 で始まらない数字のみが一致する」ようにすることもできます。負の数値の前:
^(0│-?[1-9][0-9]*)$
これは次のとおりです: 「0 または 0 で始まる数値には、マイナス記号の前の数字。" さて、それでは、あまり厳密ではなく、0 から始まるようにしましょう。コインを表すときにマイナス記号は必要ないので、マイナス記号を削除しましょう。次に、Match を使用するパターンを指定します。小数部:
^[0-9] (.[0-9] )?$
これは、一致する文字列が少なくとも 1 つのアラビア数字で始まる必要があることを意味します。上記のパターンの "10." は一致しません。一致するのは "10" と "10.2" だけです (理由はわかりますか)
(.[0-9]{2) })?$
上で、小数点以下 2 桁でなければならないと指定しましたが、これが厳しすぎると思われる場合は、次のように変更できます。 ] (.[0- 9]{1,2})?$
これにより、小数点の後に 1 文字または 2 文字が許可され、読みやすくするために (3 桁ごとに) カンマが追加され、それを表現できるようになります。このように:
^[0-9]{1,3}(,[0-9]{3})*(.[0-9]{1,2})?$
空白文字列の入力を許可したい場合は、プラス記号 ' ' を乗算記号 '*' に置き換えることができることを忘れないでください (なぜですか?)。また、バックスラッシュ ' ' が原因となる可能性があることも忘れないでください。 PHP 文字列のエラー (非常に一般的なエラー) を確認できたので、すべてのカンマ str_replace(",", "", $money) を削除して、型を double として扱い、数学的な計算を行うことができます。
電子メールをチェックするための正規表現の構築
電子メール アドレスを検証する方法について引き続き説明します。 完全な電子メール アドレスには 3 つの部分があります。 「@」すべて)、「@」、サーバー名(残り) ユーザー名には、大文字と小文字、アラビア数字、ピリオド(「.」)、マイナス記号(「-」)、およびアンダースコア(')を含めることができます。 _') サーバー名もこのルールに従いますが、
では、ユーザー名の先頭と末尾にピリオドを使用することはできません。また、サーバーにも同じことが当てはまります。間に少なくとも 2 つのピリオドが必要です。次に、ユーザー名に一致するパターンを記述する方法を見てみましょう:
^[_a-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-] )*$
これは完全な電子メール認証マッチング モードです。 call
eregi('^[_a-z0-9-] (.[_a-z0-9-] )*@[a-z0-9-] (.[a-z0-9-] )*$ ',$eamil )
メールかどうかを取得できます。
正規表現のその他の使用法
文字列の抽出
ereg() と eregi() には、正規表現を使用して文字列の一部を抽出できる機能があります (具体的な使用方法についてはマニュアルをお読みください)。たとえば、パス/URL からファイル名を抽出したいとします。必要なのは次のコードです:
ereg("([^\/]*)$" , $ pathOrUrl, $regs);
echo $regs[1];
高度な置換
ereg_replace() と eregi_replace() も非常に便利です。記号はカンマに置き換えられます:
ereg_replace("[ nrt] ", ",",trim($str));