15分で正規表現に精通する


多くの人が正規表現に頭を悩ませているに違いない.今日、私は私の認識で、ネット上のいくつかの文章を加えて、普通の人が理解できる表現を望んでいます.皆さんと学習経験を分かち合いましょう.
冒頭、やはり^と$はそれぞれ文字列の開始と終了に一致するために使用されています.以下、それぞれ例を挙げて説明します.
「^The」:先頭に必ず「The」文字列があります.
「of despair$」:最後に必ず「of despair」の文字列があります.
では、
「^abc$」:abcで始まる文字列とabcで終わる文字列を要求しますが、実際にはabcのみが一致します.
「notice」:noticeを含む文字列を一致させる
私たちが言及した2つの文字(最後の例)を使用していない場合は、モード(正規表現)が検証された文字列のどこにでも表示され、両側にロックされていないことがわかります.
次に、「*」、「+」、「?」と言います.
彼らは1つの文字が現れる回数または順序を表すために用いる.彼らはそれぞれ次のように述べた.
「ゼロor more」は{0,}に相当し、
「one or more」は{1,}に相当し、
"zero or one."{0,1}に相当します.ここではいくつかの例です.
「ab*」:ab{0,}と同義で、aで始まる文字列に一致し、後ろに0個またはN個のbからなる文字列(「a」,「ab」,「abbb」,など)を接続することができる.
「ab+」:ab{1,}と同義で、上条と同じであるが、少なくとも1つのbが存在しなければならない(「ab」,「abbb」,など.).
"ab?":ab{0,1}と同義で、bが1つもなくてもよいし、1つしかない.
「a?b+$」:1つまたは0つのaに1つ以上のbで終わる文字列に一致する.
要点,'*','+','?'前の文字だけ
カッコの中で文字の出現個数を制限することもできます.例えば、
「ab{2}」:aの後ろに必ず2つのbがついていることを要求する(「abb」);
「ab{2,}」:aの後ろに必ず2つ以上のb(例えば「abb」、「abbbb」など)が必要である.
「ab{3,5}」:aの後ろに2-5個のb(「abbb」,「abbbb」,または「abbbb」)があることが要求される.
次のように、いくつかの文字をカッコに入れます.
「a(bc)*」:aの後ろに0つまたは1つの「bc」が一致する.
「a(bc){1,5}」:1個から5個の「bc.」
OR操作に相当する「‖」という文字もあります.
「hi‖hello」:「hi」または「hello」を含む文字列を一致させる.
「(b‖cd)ef」:befまたは「cdef」を含む文字列に一致する.
「(a||b)*c」:マッチングは、このような複数(0個を含む)のaまたはbを含み、後にc
の文字列;
1つのポイント('.')は、「」を含まないすべての単一文字を表すことができます.
「」を含むすべての文字を一致させるにはどうすればいいですか?
そうだ、'[.]'でこのパターン.
「a.[0-9]」:aに1文字、0から9の数字を追加
「^.{3}$」:任意の3文字の末尾.
括弧で囲まれた内容は単一の文字にのみ一致します
「[ab]」:単一のaまたはbに一致する(「a|b」と同様).
「[a-d]」:'a'から'd'に一致する単一の文字(「a|b||c|d」と「[abcd]」の効果と同じ).一般的には[a-zA-Z]で文字を1つの大文字と小文字に指定します.
「^[a-zA-Z]」:大文字と小文字で始まる文字列に一致
「[0-9]%」:x%などの文字列を一致させる
「,[a-zA-Z 0-9]$」:カンマに数字またはアルファベットで終わる文字列を一致させる
また、あなたが望んでいない文字を中括弧に列挙することもできます.総括弧の中で'^'を先頭「%[^a-zA-Z]%」として使用するだけで、2つのパーセント記号の中にアルファベット以外の文字列があることに一致します.
要点:^中括弧の先頭に使うときは、中括弧から除外する文字を表します
PHPが説明できるように、これらの文字の前に「」を付けて、いくつかの文字をエスケープしなければなりません.
中括弧の中にある文字がこの規則の例外であることを忘れないでください.中括弧の中で、すべての特殊な文字、(')を含んで、すべて彼らの特殊な性質"*+?{}."を失いますこれらの文字を含む文字列を一致させる.
また、regxのマニュアルでは、「リストに']'が含まれている場合は、リストの最初の文字として('^'の後ろに続く可能性がある)ことが望ましい.'-'が含まれている場合は、一番前または一番後ろに置くことが望ましい.orまたは範囲の2番目の終了点[a-d-0]の間の'-'が有効になる.
上の例を見て、{n,m}について理解したでしょう.なお、nとmはいずれも負の整数であることができず、nは常にmよりも小さいので、n回を最小にし、m回を最大にすることができる.「p{1,5}」が「pvpppppppp」の最初の5つのpに一致する
次はで始まる
彼は単語の境界を一致させるために使われていると言っていますが...例えば「veb」は、veryにveがあるのではなく、loveのveに一致することができます.
Bはちょうど上のbと反対です.例を挙げない
.....ふと思い出すと...まで
http://www.phpv.net/article.php/251他ので始まる文法を見てみましょう
では、応用をしてみましょう.
通貨数の入力に一致するパターンを構築する方法
入力した情報がmoneyを表す数字であるかどうかを確認するために、マッチングモードを構築します.moneyの数を表すには4つの方法があると考えられています.「1000.00」と「1000.00」、あるいは小数部がない、「10000」and「10000」です.次に、このマッチングモードの構築を開始します.
^[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と見なして数学計算をすることができます.
もう一つ:
チェックemailの正規表現を構築する
完全なemailアドレスには、次の3つのセクションがあります.
1.ユーザー名('@'左のすべて)、
2.'@',
3.サーバ名(残り)
ユーザ名には、大文字と小文字のアラビア数字、句点('.')、マイナス記号('-')、and下線('')を含めることができる.サーバ名もこのルールに合致する、もちろん下線を除く.
現在、ユーザ名の開始と終了は句点ではない.サーバも同様である.また、2つの連続したポイントを持つことはできません.彼らの間に少なくとも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-]+)*$ 

これが完全なemail認証マッチングモードで、呼び出すだけです.
eregi(‘^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*$ ’,$eamil) 

メールかどうかを手に入れることができます
正規表現のその他の使い方
文字列の抽出
ereg()and eregi()には、正規表現で文字列の一部を抽出できる特性がある(具体的な使い方はマニュアルを読むことができる).例えば、path/URLからファイル名を抽出したいですか?次のコードが必要です.
ereg("([^\\/]*)$", $pathOrUrl, $regs); 
echo $regs[1]; 

高度な置換
ereg_replace()とeregi_replace()も便利です.すべての間隔の負の記号をカンマに置き換えたい場合は、
ereg_replace("[ 
\r\t]+", ",", trim($str));

最後に、EMAILの正規表現をチェックして、文章を見ているあなたに分析してもらいます.
"^[-!#$%&\'*+\\./0-9=?A-Z^_`a-z{|}~]+'.'@'.'[-!#$%&\'*+\\/0-9=?A-Z^_`a-z{|}~]+\.'.'[-!#$%&\'*+\\./0-9=?A-Z^_`a-z{|}~]+$"

便利に読めるなら、この文章の目的は达した.