ホームページ  >  記事  >  php教程  >  例を見て PHP の正規表現を学びましょう

例を見て PHP の正規表現を学びましょう

WBOY
WBOYオリジナル
2016-06-21 09:02:04967ブラウズ



正規表現の基本構文

まず、2 つの特殊文字を見てみましょう: '^' '$' 以下に例を示します。


"^The":
で始まる文字列と一致します。 「;
「絶望」:
は、「絶望」 と一致します。 ; "^abc
$":
abc と一致します。 abc で終わる文字列は、実際には abc のみに一致します "notice":
は、
notice

前述した 2 つの文字 (最後の例) を使用しない場合、
パターン (正規表現式) は文字列内のどこにでも出現できることがわかります。テスト中、両側にロックされていません ここにはさらにいくつかの文字があります
'*'、'+'、 および '?'、 は、文字が出現する回数または順序を示すために使用されます 。それぞれは、「0 個以上」、「1 つ以上」、「0 または 1 個」を意味します。いくつかの例を示します: "ab*": は、文字列 a および 0 以上の A と一致します。複数の b("a", "ab", "abbb" など) で構成される文字列。 );
"ab+":
は上記と同じですが、少なくとも 1 つの b ("ab") 、" abbb" など);
"ab?":
0 と一致します。 one b;
"a?b+$":
は 1 または 0a で終わる 1 つ以上の b

文字列。

"
ab
{2}": は 1 つの
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)*":
は、 の後に 0 または 1 つの "bc" と一致します。 ;
"a(bc){1,5}":
1 から 5 " bc."


文字 '│' もあります。OR 操作:

"
hi│hello":
が含まれる「こんにちは」 または 「こんにちは」 文字列 " ( b│cd)
ef":
"bef" または と一致します> "cdef" の文字列"(a│b)*c":
は複数の
- (0 を含む) a または b、その後に c
文字列 が続きます。 >
ドット

('.')
は、すべての 単一文字 を表すことができます。 "a.[0-9]": aa の後に文字、その後に数字 (次のような文字列が含まれます)文字列が一致します。将来この括弧は省略します)
"^.{3}$":
は 3 つの文字 で終わります。


角括弧で囲まれた内容は、 単一文字

"[
ab ]":
は、単一の a または b ( および ) と一致します。 "a│b" と同じ); "[a-d]":
と一致します。 a' から 'd' 単一文字 ( および "a│b│c│d" "[abcd]"効果は同じです ); "^[a-zA
-Z]": は、文字
"[0] で始まる文字列と一致します。 - 9]%":
は、
x% の形式で を含む文字列と一致します。 ",[a-zA-Z0-9]$":
カンマで終わり、その後に数字または文字が続く文字列と一致します



括弧内に入れたくない文字をリストすることもできます。括弧内の
の先頭に '^' を使用するだけです。 (つまり、「%[^a-zA-Z]%」 は、 の中に文字以外の文字が含まれる 2 つのパーセント記号と一致します。 の文字列 )。を説明するには、特別な意味を持つ文字として "^.[$()│*+?{" を含める必要があります。 ''、 を追加します。php3 では、パターンの先頭で を使用しないようにしてください。たとえば、正規表現 "($│?[0-9]+" ) は次のようになります。この Call ereg("(\$│?[0-9]+", $str) (わからない php4同じですか)

角括弧内の文字はこの規則の例外であることを忘れないでください括弧内は、すべての特殊文字 (('')、 は特別なプロパティを失います(つまり、"[*+?{}.]"はこれらの文字を含む文字列と一致します)。 🎜>また、regx のマニュアルにあるように、: "リストに ']' が含まれる場合、 はリストの最初の文字として使用するのが最適です ( '^' の後に が続く場合があります)。'-' が含まれる場合は、先頭または末尾 、または範囲 の 2 番目の終点に配置することをお勧めします (例 [a-d-0- 9] 真ん中の '-' が有効になります完全を期すため 照合シーケンス、文字クラス、を一緒に 等価にする必要があります。 しかし、これらの側面についてはあまり詳しく説明したくありませんこれらについては、次の記事で説明する必要はありません . 詳細については、regex マニュアル ページ を参照してください。

通貨金額

さて、ここで学んだことを使って何か役に立つことをしてみます。入力情報が お金お金の量を表すには4つの方法があると考えます: "10000.00" "10,000.00" 、または小数部分なし、「10000」および「10,000」次に、この一致パターンの構築を開始しましょう: ^[1-9][0-9]*$



これはすべての変数が
0 .しかし、これは 単一の "0" もテストに合格できないことを意味します 解決策は次のとおりです: ^(0│[1-9][0-9]*)$
"


00 で始まらない数字のみが と一致します。 > では、数値 の前に負号を付けることもできます: ^(0│-?[1-9][0-9]*)$ これはです: "0 または 0 で始まるものはマイナスになる可能性があります前の数字は です。」 わかりましたさて、あまり厳密に考えずに 0Start.さあ、 マイナス , を落としてみましょう。 コインを表すときに を使用するため、 パターン を小数部 と一致させるように指定します。 ^[0-9]+(.[0-9]+)?$



これは、一致する文字列が少なくとも 1 つのアラビア数字で始まる必要があることを意味します
.ただし、上記のパターンでは、 "10." に一致しないことに注意してください。 "10" および "10.2" のみが にできます。理由はわかります) ^[0-9]+(.[0-9]{2})?$

us上記で、小数点

の後に小数点以下 2 桁が必要であると指定しました。
これが厳しすぎると思われる場合は、 を変更できます。 >: ^[0-9]+(.[0-9]{1,2})?$

これ

の後に 1 つまたは 2 つの小数点を許可します。
読みやすくするために (3 桁ごとに) カンマを追加します。 を表現できます。次のようになります : ^[0-9]{1,3}(,[0-9]{3})*(.[0-9]{1,2 })?$プラス記号を忘れないでください '+' は乗算記号 '*' に置き換えることができます空白を許可したい場合は、文字列を と入力します (なぜ?) バックスラッシュ '' php 文字列 (A) でエラーが発生する可能性があります非常に一般的なエラー)。これで、文字列 すべてのカンマを削除できました。 str_replace(",", "", $money) 次に、型を double として扱い、それを通して数学的計算を行うことができます
メール
を確認するための正規表現を構築します。
わかりましたメールアドレスを確認する方法について説明していきます。 🎜 >完全な メールアドレスには 3 つの部分があります: POP3 ユーザー名 ( '@' )、'@'、サーバー名 の左側すべて( は残りの部分)。ユーザー名には大文字と小文字、アラビア数字を含めることができますピリオド ('.')、マイナス記号('-')、および アンダースコア ('_' ) . サーバー名もこのルールに準拠しますもちろん、アンダースコアは除きます。 >Now

ユーザー名の先頭も末尾もピリオドではありません サーバーについても同様です。 . また、間に少なくとも 1 文字を挟む 2 つの連続したピリオドを使用することはできません。次に、ユーザー名 に一致するパターンを記述する方法を見てみましょう。 ^[_a- zA-Z0-9-]+$

期間

の存在はまだ許可されていません。 🎜>それを追加します
: ^[_a-zA-Z0-9-]+(.[_a-zA-Z0-9-]+)*$ 上記

を意味します: 「

は少なくとも 1 つの正規文字で始まります (
を除く。) の後に 0 またはドット で始まる複数の文字列が続きます。" を簡略化するには、 の代わりに eregi() を使用できます。 ereg().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-]+)*$


これは完全なメール認証照合モードです。必要なのは電話のみです

エレギ('^[_a-z0-9-]+(.[_a-z0-9-]+)*@[a-z0 -9-] +(.[a-z0-9-]+)*$ ',$eamil)

は、 メールかどうかを取得できます
正規表現のその他の使用法

文字列の抽出

ereg() および eregi()
には、ユーザーが正規表現を渡すことができる機能があります。 文字列 (具体的な使用方法については、マニュアル を参照してください)。たとえば、 パス/URL からファイル名 を抽出したいと考えています :
ereg
("([^\/]*)$", $pathOrUrl, $regs); 登録[1]
;高度な置換

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


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



声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。