ホームページ >バックエンド開発 >PHPチュートリアル >PHPのワクワクする正規表現の基礎(図解で詳しく解説)
前回の記事では、主にリスト関数と各関数の使い方と両者の間で何をすべきかを解説した『PHPのリストの使い方と各関数と連携を学ぶ』をお届けしました。 . 併用すればほぼマスターできたと思いますので、今回はPHPの正規表現について見ていきます。みんなが助けてくれるといいですね!
正規表現とは、先頭に宣言されたいくつかの文字と、それらの文字を組み合わせた「指定された文字列」である論理式です。文字列をフィルタリングするために使用されます。ユーザーとしてログインするときに、確認コードや電話番号などの特定のデータを入力する必要があることがわかりますが、このときは正規表現を使用する必要があります。
正規表現は複雑そうに見えますが、実際はそれほど難しくありません。次に見ていきましょう。
正規表現の区切り文字
#最初に学ばなければならないのは、正規表現の区切り文字です。区切り文字は、正規表現の境界を決定する記号です。境界を設定すると、正規表現は境界内に収まります。同時に、正規表現の区切り文字も規定されています。
区切り文字は使用できません。a-zA-Z0-9\ は使用できます。それ以外の場合は使用できます。そして、それらは始まりと終わりを持ってペアで現れる必要があります。
例は次のとおりです:
$正则表达式$ %正则表达式% /正则表达式/
注意する必要があるのは、/
がエスケープ文字であることです。正規表現内の / に一致します。 \ を使用してエスケープできます。それが面倒な場合は、次のような他の区切り文字を直接使用することもできます。
$/$
正規表現のアトム
正規表現のアトムは正規表現です。式の最小単位は一致する必要があるものであり、確立する整数式には少なくとも 1 つの原子が存在する必要があります。
実際、スペース、キャリッジ リターン、ライン フィード、0 ~ 9、句読点、A-Za-z、中国語など、目に見える文字と目に見えない文字はすべてアトムであると理解できます。原子。
preg_match() 関数
アトムについて詳しく話す前に、まず関数を理解する必要があります。つまり、preg_match
PHP の preg_match() 関数は、定義された正規表現に基づいて文字列を検索および照合できます。
構文形式は次のとおりです。
preg_match ( string $正则 , string $字符串 [, array &$结果] )
定義した正規表現である $regex によると、$string に一致する場合、存在する場合は一致した数が返されます。一致する結果が結果の $In に配置されます。結果が見つからない場合は 0 が返されます。
例を通して見てみましょう:
<?php //定义一个变量叫a,作为我们定义的正则表达式。 $a = '/a/'; $b = 'abbcccddddeeeee'; if(preg_match($a, $b, $c)){ echo '匹配到了,结果为:'; var_dump($c); }else{ echo '没有匹配到'; } ?>
出力結果:
上の例からわかるように、$b に偶然存在する a と一致することを期待して変数 a を定義し、if else ステートメントによる出力が成功しました。
別の例:
<?php //定义一个变量叫a,作为我们定义的正则表达式。 $a = '/fff/'; $b = 'abbcccddddeeeee'; if(preg_match($a, $b, $c)){ echo '匹配到了,结果为:'; var_dump($c); }else{ echo '没有匹配到'; } ?>
出力結果:
上記の例では、文字列と一致することを期待していますが、 $ b には存在しないため、一致は成功しません if else ステートメントは一致が成功したことを出力します。
preg_match() 関数の基本的な使用法を理解した後は、特別に識別されたアトムと組み合わせて使用できます。
特別に識別された原子
##\d---0 ~ 9 と一致します
\D---0 ~ 9 を除くすべての文字
#\w---a-zA- Z0-9_
\W---0-9A-Za-z_ を除くすべての文字
\s ---すべての空白文字と一致します\n \t \r スペース
\S---空白以外のすべての文字と一致します 文字
[ ]---指定範囲のアトム
#
<?php $a = '/\d/'; $b = '人生自古谁无4'; if(preg_match($a, $b, $c)){ echo '匹配到了,结果为:'; var_dump($c); }else{ echo '没有匹配到'; } ?>
上記の例では、特別に識別された原子 \d は 0 を表します。数値が 9 の場合、 $b には照合する必要がある 4 があるため、照合は成功します。
<?php $a = '/\w/'; $b = '人生自古谁无死'; if(preg_match($a, $b, $c)){ echo '匹配到了,结果为:'; var_dump($c); }else{ echo '没有匹配到'; } ?>
出力結果:
#上記の例では、特別に識別された原子 \w は a-zA-Z0-9_ を表します。は変数 b に対応する要素がないため、出力結果は一致しません。
指定された間隔に一致しない文字を示す
[^] 文字もあります。 例は次のとおりです:
<?php $a = '/[^0-9A-Za-z_]/'; $b = 'abbccc122333'; if(preg_match($a, $b, $c)){ echo '匹配到了,结果为:'; var_dump($c); }else{ echo '没有匹配到'; } ?>
出力結果:
通过[^]字符匹配除0-9A-Za-z_以外的字符,未匹配到。
总结一下:
\w
---[a-zA-Z0-9_]
\W
---[^a-zA-Z0-9_]
\d
---[0-9]
\D
---[^0-9]
\s
---[ \t\n\f\r]
\S
---[^ \t\n\f\r]
正则表达式的元字符
在上面的示例中,我们能够看出通过匹配的话,只能匹配一个字符,但是在我们的日常使用中,通常会匹配多个字符,那这时候只通过我们的原子就不能达到我们的目的。就需要通过元字符来帮我们修饰原子,实现更多的功能。
*
---代表匹配前面的一个原子,匹配0次或者任意多次前面的字符。
+
---匹配一次或多次前面的一个字符
?
---前面的字符可有可无【可选】 有或没有
.
---更标准一些应该把点算作原子。匹配除了\n以外的所有字符 或者。注:它的优先级最低了。
^
---必须要以抑扬符之后的字符串开始
$
--- 必须要以$之前的字符结尾
\b
---词边界
\B
---非边界
{m}
---有且只能出现m次
{n,m}
---可以出现n到m次
{m,}
---至少m次,最大次数不限制
()
---改变优先级或者将某个字符串视为一个整体,匹配到的数据取出来也可以使用它
接下来我们通过一些例子来实例看一下这些元字符的使用:
<?php $a = '/\d+/'; $b = "爱你10000年"; if(preg_match($a, $b, $c)){ echo '匹配到了,结果为:'; var_dump($c); }else{ echo '没有匹配到'; } ?>
输出结果:
通过元字符+的添加,匹配到了多次字符,\d+中d是匹配数字,+则表示最少匹配一次前面的字符。
正则表达式的模式修正符
通过原子和元字符的了解,我们已经完成了正则表达式的入门,但是这仍然不能代表正则表达式的真正实力,如果我们只希望正则表达式匹配一部分应该怎么办?有些特殊情况依然需要处理,这时候我们就要用到正则表达式的模式修正符。
下面列举一些常用的模式修正符:
i 模式中的字符将同时匹配大小写字母.
m 字符串视为多行
s 将字符串视为单行,换行符作为普通字符.
x 将模式中的空白忽略.
A 强制仅从目标字符串的开头开始匹配.
D 模式中的美元元字符仅匹配目标字符串的结尾.
U 匹配最近的字符串.
它的用法如下:
/正则表达式/模式修正符
接下来我们通过一些实例来看一下它的使用:
<?php $a = '/ABC/i'; $b = '8988abc12313'; $c = '11111ABC2222'; if(preg_match($a, $b, $d)){ echo '匹配到了,结果为:'; var_dump($d); }else{ echo '没有匹配到'; } ?>
输出结果:
i可以让匹配的时候同时匹配大小写,那么接下来把匹配的$b换成$c试一下,我们看一下输出结果:
<?php $a = '/ABC/i'; $b = '8988abc12313'; $c = '11111ABC2222'; if(preg_match($a, $c, $d)){ echo '匹配到了,结果为:'; var_dump($d); }else{ echo '没有匹配到'; } ?>
输出结果:
推荐学习:《PHP视频教程》
以上がPHPのワクワクする正規表現の基礎(図解で詳しく解説)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。