ホームページ > php教程 > php手册 > PHP を使用した動的な Web ページの作成: 例を通じて正規表現を学習します

PHP を使用した動的な Web ページの作成: 例を通じて正規表現を学習します

WBOY
リリース: 2016-06-21 09:01:00
オリジナル
844 人が閲覧しました

まず、2 つの特殊文字「^」と「$」を見てみましょう。これらはそれぞれ、文字列の先頭と末尾を一致させるために使用されます。

: "^The": で始まる文字と一致します。 "The" で始まる文字列;

"of speech$": "of Peace" で終わる文字列と一致します。

"^abc$": abc および abc で始まる文字列と一致します。末尾は実際には abc のみに一致します。

"notice": Notice を含む文字列に一致します。

前述の 2 つの文字を使用しない場合がわかります。 )、つまり、パターン (正規表現) はテスト対象の文字列内のどこにでも出現できますが、両側にロックするわけではありません。

また、「*」、「+」、および「?」という文字もあり、それぞれ文字の出現数または順序を表すために使用されます。「0 個以上」、「」を表します。例をいくつか示します:

"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 ("abb") に一致します。 : 少なくとも 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 演算に相当する文字 '│' もあります:

hello": 「hi」または「hello」を含む文字列に一致します。

「(b│cd)ef」: 「bef」または「cdef」を含む文字列に一致します。 c": 複数の (0 を含む) a または b を含み、その後に c 文字列が続く文字列と一致します。

ドット ('.') はすべての単一文字を表します:

"a.[ 0-9]": a の後に文字が続き、その後に数字が続きます (このような文字列を含む文字列が一致し、この括弧は将来省略されます)

"^.{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] の「-」)。

完全を期すために、照合シーケンス、文字クラス、および等価クラスについては説明する必要がありますが、これについては以下で説明します。この記事で詳しく説明する必要はありません。正規表現のマニュアル ページで詳細を確認できます。

通貨金額の入力に一致するパターンを構築する方法

さて、それでは終わりです。ここでは、学習した内容を使用して、何か役に立つことを実行します。入力情報がお金を表す数字であるかどうかを確認するための一致パターンを構築します。金額を表す方法は 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]+)?$
のように小数部分と一致するパターンを指定します。
これは、一致する文字列が少なくともアラビア数字で始まる必要があることを意味します。ただし、上記のパターンでは「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 文字を含む 2 つの連続したピリオドを使用することはできません。ここで、ユーザー名に一致するパターンを記述する方法を見てみましょう:

^[_a-zA-Z0-9-]+$

ピリオドの存在はまだ許可されていません:

^[_a-zA -Z0-9] -]+(.[_a-zA-Z0-9-]+)*$

上記は、「少なくとも 1 つの正規文字 (. 臨時記号を除く) で始まり、その後に 0 個以上の文字列が続く」ことを意味します。 "

少し簡略化するために、 ereg() の代わりに eregi() を使用できます。 eregi() は大文字と小文字を区別しないため、2 つの範囲「a ~ z」を指定する必要はありません。および「A-Z」 – 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);
echo $regs[1];

高度な置換

ereg_replace() と eregi_replace() も非常に便利です: 区切られたすべての負符号をカンマで置き換えたいとします:

ereg_replace("[ nrt]+", ",", trim($str));



関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のおすすめ
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート