「^The」: 「The」で始まる文字列と一致します。この文字列は実際には abc のみに一致します。テスト対象の文字列のどこにでも出現する場合、それを両側にロックすることはありません。
いくつかの文字「*」、「+」、「?」もあり、これらはそれぞれ「0 個以上」、「1 個以上」を表します。 、および「ゼロまたは 1 つ」の例をいくつか示します:
"ab*": 文字列 a と 0 個以上の b からなる文字列 ("a"、"ab"、"abbb" など) に一致します。
「ab+」: 上記と同じですが、少なくとも 1 つの b (「ab」、「abbb」など)
「ab?」: 0 または 1 つの b と一致します
「a?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")
常に指定する必要があることにも注意する必要があります (つまり、"{,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" を含む文字列に一致します
"; │cd)ef": "bef" または "cdef" を含む文字列と一致します;
"(a│b)*c": - 複数の (0 を含む) a または b の後に、次の A 文字列が続く文字列と一致します。 c string;
ドット ('.') はすべての単一文字を表すことができます:
"a.[0-9]": a の後に文字が続き、その後に数字が続きます (文字列の文字列は次のようになります)一致する場合、この括弧は将来省略されます)
「^.{3}$」: 3 文字で終わる角括弧で囲まれた内容は 1 つの文字にのみ一致します
「[ab]」 : 1 つの a に一致します。 or 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 でも同じかどうかはわかりません)
Don'角括弧内の単語を忘れないでください。文字はこの規則の例外です。角括弧内では、('') を含むすべての特殊文字はその特別な特性を失います (つまり、「[*+?{}.]」はこれらを含む文字と一致します)また、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 桁でなければならないと指定しましたが、これが厳しすぎると思われる場合は、変更できます。 to:
^[ 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 文字のピリオドを入れることもできません。次に、ユーザー名の作成方法を見てみましょう。一致するパターンを作成します:
^[_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-]+)*$
これは完全な電子メール認証照合モードです。ただ呼び出すだけです。
エレギ('^[_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("[ nrt]+", ",", trim($ str)) ;