PHP 初心者のための正規表現
1.区切り文字
区切り文字とは何ですか?
いわゆるデリミタとは境界を設定するもので、その境界内に内容を記述する必要があります
// これは正規表現における区切り文字であり、式は//
の途中に記述する必要があります。 /a-z/
2 .区切り文字とは何ですか?
区切り文字には | |、//、{}、!! などの文字、数字、バックスラッシュ以外の文字も使用できますが、特別な必要がない場合は、正規表現の区切り記号を使用する
3.正規表現の構築
標準の正規表現は、
(1).Delimiter
(2).Expression
(3)の3つの部分で構成されます。
区切り文字: 区切り文字は式をラップするために使用されます。一般的に使用される区切り文字「/」を除く任意の文字を使用できます。
式: 式はいくつかの特殊文字 (メタ文字) と非文字で構成されます。特殊文字 (テキスト文字) は
修飾子で構成されます: PHP 正規表現の修飾子は正規表現の多くの特性を変更し、正規表現をニーズにより適したものにすることができます (注: 修飾記号では大文字と小文字が区別されます。つまり、 「e」は「E」と等しくありません)
正規表現の修飾子とは何ですか? PHP正規表現修飾子の種類と紹介:
◆i: 「i」を修飾子に追加すると、正規表現は大文字と小文字の区別をキャンセルします。つまり、「a」と「A」は同じです。
◆m: デフォルトの通常の開始 "^" と終了 "$" は通常の文字列のみに使用されます。修飾子に "m" を追加すると、開始と終了は文字列の各行、つまり先頭を参照します。各行は「^」で終わり「$」で終わります。
◆s: 修飾子に「s」を追加すると、改行文字を除く任意の文字を表すデフォルトの「.」が改行文字を含む任意の文字になります。
◆x: この修飾子を追加すると、エスケープされていない限り、式内の空白文字は無視されます。
◆e: この修飾子は置換の場合にのみ役立ちます。つまり、置換の PHP コードとして使用されます。
◆A: この修飾子を使用する場合、式は一致する文字列の先頭である必要があります。たとえば、「/a/A」は「abcd」と一致します。
◆E: "m" とは異なり、この修飾子が使用される場合、"$" は改行文字の前ではなく、文字列の絶対的な末尾と一致します。このモードはデフォルトでオンになっています。
◆U: クエスチョンマークと同じ機能があり、「貪欲モード」を設定するために使用されます。
正規表現のアトムアトムは正規表現の最小単位であり、端的に言えば、アトムは一致する必要があるコンテンツです。有効な正規表現には少なくとも 1 つのアトムが含まれている必要があります
説明: 私たちが目にするスペース、キャリッジ リターン、ライン フィード、0 ~ 9、A-Za-z、中国語、句読点、特殊記号はすべてアトムです。アトミックな例を行う前に、まず関数 preg_match について説明しましょう
構文: int preg_match (string $normal, string $string [, array &$result])
上記は、preg_match で一般的に使用される主なパラメーターです。他のいくつかのパラメーターは上にリストしませんでした。他の 2 つのパラメーターがあまりにも一般的でないためです。
実験を通して証明してみましょう:
<?php
header("Content-type: text/html; charset=utf-8");//设置编码
$zz = '/a/';
$string = 'ddfdjjvai2jfvkwkfi24';
if(preg_match($zz, $string, $matches)){
echo '匹配到了,结果为:';
var_dump($matches);
}else{
echo '没有匹配到';
}
?>注: $zz は正規表現の規則です。 $string は文字列です。 この例は、文字列が一致する正規表現を満たすかどうかを判断するもので、満たす場合は結果を出力します。満足、出力情報
特別に識別された原子

d 0-9 と一致
<?php
header("Content-type: text/html; charset=utf-8");//设置编码
// \d的用法
$zz = '/\d/';
$string = '我爱喝9你爱不爱喝';
if(preg_match($zz, $string, $matches)){
echo '匹配到了,结果为:';
var_dump($matches);
}else{
echo '没有匹配到';
}
?>D 0-9 を除くすべての文字
わぁ-zA- Z0-9_
<?php
// \D 匹配出0-9以外的所有字符
$zz = '/\D/';
$string = '12124323453453';
if(preg_match($zz, $string, $matches)){
echo '匹配到了,结果为:';
var_dump($matches);
}else{
echo '没有匹配到';
}
?>W wの反対<?php
// \w 匹配a-zA-Z0-9 还有下划线
$zz = '/\w/';
$string = '新中_国万岁呀万岁';
if(preg_match($zz, $string, $matches)){
echo '匹配到了,结果为:';
var_dump($matches);
}else{
echo '没有匹配到';
}
?>s すべての空白文字と一致します<?php
//\W 除a-zA-Z0-9_ 以外的所有字符
$zz = '/\W/';
$string = '......';
if(preg_match($zz, $string, $matches)){
echo '匹配到了,结果为:';
var_dump($matches);
}else{
echo '没有匹配到';
}
?>S 空でない文字 <?php
// \s 匹配所有的空白字符
$zz = '/\s/';
$string = "中国万
岁";
if(preg_match($zz, $string, $matches)){
echo '匹配到了,结果为:';
var_dump($matches);
}else{
echo '没有匹配到';
}
?> [ ]指定範囲アトム <?php
// \S 匹配非空字符
$zz = '/\S/';
$string = "
a ";
if(preg_match($zz, $string, $matches)){
echo '匹配到了,结果为:';
var_dump($matches);
}else{
echo '没有匹配到';
}
?> これらの w s W S を覚えるのは難しいので、以下に同等のものがあります。効果は s w などと同じです。
+ 前の文字と少なくとも 1 回一致します
<?php
// [] 指定原子范围
$zz = '/[0-5]\w+/';
$string = '6a';
$string1 = '1C';
if(preg_match($zz, $string, $matches)){
echo '匹配到了,结果为:';
var_dump($matches);
}else{
echo '没有匹配到';
}
?>* 前の文字と 0 回または任意の回数一致します <?php
header("Content-type: text/html; charset=utf-8");//设置编码
$zz = '/\d+/';
$string = "迪奥和奥迪250都是我最爱";
//待会儿再试试中间没有0-9的情况
//$string = "迪奥和奥迪都是我最爱";
if(preg_match($zz, $string, $matches)){
echo '匹配到了,结果为:';
var_dump($matches);
}else{
echo '没有匹配到';
}
?> は、0 回または 1 回出現します (オプション) <?php
$zz = '/\w*/';
$string = "!@!@!!@#@!$@#!";
//待会儿再试试中间没有0-9的情况
//$string1 = "!@#!@#!abcABC#@#!";
if(preg_match($zz, $string, $matches)){
echo '匹配到了,结果为:';
var_dump($matches);
}else{
echo '没有匹配到';
}
?> を除くすべての文字と一致します。 n <?php
$zz = '/ABC\d?ABC/';
$string = "ABC1ABC";
//待会儿再试试中间没有0-9的情况
//$string1 = "ABC888888ABC";
//$string2 = "ABCABC";
if(preg_match($zz, $string, $matches)){
echo '匹配到了,结果为:';
var_dump($matches);
}else{
echo '没有匹配到';
}
?>| (垂直バー)、または、最も低い優先順位 <?php
$zz = '/gg.+gg/';
$string = "ABC1ABC";
if(preg_match($zz, $string, $matches)){
echo '匹配到了,结果为:';
var_dump($matches);
}else{
echo '没有匹配到';
}
?> 上記の例から、次のことがわかります。 1. マッチングの最初のアイデアは、abcd または abbcd に一致することでした。ただし、$string1 と $string2 を照合すると、照合結果は abc と bcd になります。2 を実装または照合すると、照合結果は abc または bcd になります。連続する文字列よりも優先度が高いわけではありません🎜
^ (サーカムフレックス)、^
<?php
$zz = '/abc|bcd/';
$string1 = "abccd";
$string2 = "ggggbcd";
if (preg_match($zz, $string1, $matches)) {
echo '匹配到了,结果为:';
var_dump($matches);
} else {
echo '没有匹配到';
}
?>の後の文字列で始まる必要があります。実験により次の結論が見つかりました:
1 は正常に一致しましたが、$string2 は正常に一致しませんでした
2。指定された文字
3 で始まり、$string2 は ^
4 以降の文字で始まりません。この規則の変換は、「Li Wenkai はとてもハンサムです」で始まり、その後に a-zA-Z0- が続きます。 9_少なくとも 1 文字。
$ (ドル記号) は $ の前の文字で終わる必要があります
<?php
$zz = '/^张杰好帅\w+/';
$string1 = "张杰好帅abccdaaaasds";
//$string2没有以张杰好帅开始
$string2 = "帅abccdaaaasds";
if (preg_match($zz, $string1, $matches)) {
echo '匹配到了,结果为:';
var_dump($matches);
} else {
echo '没有匹配到';
}
?>注:
$string1 は正常に一致しますが、$string2 は一致しません
$$ の前の文字は d+ で、その後に中国語の努力が続きます。
したがって、一致するのはこの全体です。 d は 0 ~ 9 の整数型を指し、+ 記号は少なくとも 1 つの 0 ~ 9
{m} を表します。これらは m 回のみ出現できます
<?php
$zz = '/\d+努力$/';
$string1 = "12321124333努力";
//$string2
$string2 = "12311124112313力";
if (preg_match($zz, $string1, $matches)) {
echo '匹配到了,结果为:';
var_dump($matches);
} else {
echo '没有匹配到';
}
?>注: d{1,3}上の例では、0 ~ 9 は 1 回、2 回または 3 回のみ出現できると規定しました。それ以外の時間はすべて間違っています
{m,} 少なくとも m 回、最大数は制限されていません
<?php
$zz = '/喝\d{1,3}酒/';
$string1 = "喝9酒";
//$string2 = "喝988酒";
if (preg_match($zz, $string1, $matches)) {
echo '匹配到了,结果为:';
var_dump($matches);
} else {
echo '没有匹配到';
}
?>上の例では、d{2,} を飲むと規定しています次の 0 ~ 9 少なくとも 2 回出現する必要があり、最大回数に制限はありません。したがって、$string1 は一致に失敗し、$string2 は正常に一致します。 $string3 は一致に成功しました
正規表現のヒント
少し書いて少しテストしてください
定数の正規化が必要であり、一致が成功するかどうかを比較するために preg_match を使用するためです。成功したら次のポイントを書きましょう。書き終えてすべてのマッチングが成功するまで!
次に、電子メールの正規表現の統合例を作成しましょう
ステップ 1: すべての電子メール形式をリストします
liwenkai@phpxy.com
iwenkai@corp.baidu.cm
iwenkai@126。 _w_k@xxx.com
2345@qq.com
最初に @ の前の文字 w+ と一致します (0-9A-Za-z_ であるため)
2 番目の文字の後に @ 記号が続きます
3 番目の文字は次にqq や 126 などの主要なドメイン名は
corp.baidu または 126 で下線を引くことができないため、[a-zA-Z0-9-]+ と書きます。通常、メールのサフィックスは次のようになります。したがって、次のように書くことができます: ([a-zA-Z0-9-]+.){1,2}
上記は、独自の意味を持つようにエスケープするものです。括弧は少なくとも 1 回、最大 2 回繰り返す必要があります。
com|cn|org|gov.cn|net|edu.cn を選択してお待ちください
<?php
$zz = '/喝\d{2,}/';
$string1 = "喝9";
//$string2 = "喝98";
//$string3 = "喝98122121";
if (preg_match($zz, $string1, $matches)) {
echo '匹配到了,结果为:';
var_dump($matches);
} else {
echo '没有匹配到';
}
?>


