d | は0-9と一致します |
D | 0-9 を除くすべての文字 |
w | a-zA-Z0-9_ |
W | 0-9A-Za-z_を除くすべての文字 |
s | スペース以外のすべての空白文字と一致します |
Sすべて非空白文字 | |
[ ]原子の指定範囲 | |
これを覚えておく必要があります。ディクテーションレベルに達するのが最善です。覚えるときは、d は 0 ~ 9 に一致し、D は 0 ~ 9 を除くすべての文字であることをペアで覚えてください。
上記の説明は非常に明確です。これらを段階的に学習するために実験を行ってみましょう。
学習する際は、これらの原子のディクテーションレベルに必ず到達してください。将来実験をするときに少しずつ学んでいくからです。
d は 0-9 と一致します
<?php
$zz = '/\d/';
$string = '我爱喝9你爱不爱喝';
if(preg_match($zz, $string, $matches)){
echo '匹配到了,结果为:';
var_dump($matches);
}else{
echo '没有匹配到';
}
?>
D は 0-9 以外の値と一致します
<?php
$zz = '/\D/';
$string = '121243中23453453';
if(preg_match($zz, $string, $matches)){
echo '匹配到了,结果为:';
var_dump($matches);
}else{
echo '没有匹配到';
}
?>
一致は成功し、一致します。 0 ~ 9 の文字ではないためです。
w は a-zA-Z0-9_
<?php
$zz = '/\w/';
$string = '新中_国万岁呀万岁';
if(preg_match($zz, $string, $matches)){
echo '匹配到了,结果为:';
var_dump($matches);
}else{
echo '没有匹配到';
}
?>
と一致します。 一致は成功し、アンダースコアが一致します。
W は非 a-zA-Z0-9_
<?php
$zz = '/\w/';
$string = 'afasABCWEQR44231284737';
if(preg_match($zz, $string, $matches)){
echo '匹配到了,结果为:';
var_dump($matches);
}else{
echo '没有匹配到';
}
?>
と一致しましたが失敗しました。なぜなら、上記はすべて a-zA-Z0-9_ であり、a-zA-Z0-9_ でないものは何もないからです。
s は、空白文字以外のすべての空白文字に一致します。
<?php
$zz = '/\s/';
$string = "中国万
岁";
if(preg_match($zz, $string, $matches)){
echo '匹配到了,结果为:';
var_dump($matches);
}else{
echo '没有匹配到';
}
?>
復帰があるため、一致は成功します。
S の空でない文字
<?php
$zz = '/\s/';
$string = "
a ";
if(preg_match($zz, $string, $matches)){
echo '匹配到了,结果为:';
var_dump($matches);
}else{
echo '没有匹配到';
}
?>
が正常に一致しました。スペースはありますが、改行とインデントが表示されます。ただし、空白以外の文字 a が存在します。したがって、試合は成功です。
[] は原子の範囲を指定します
<?php
$zz = '/[0-5]\w+/';
$string = '6a';
$string1 = '1C';
if(preg_match($zz, $string, $matches)){
echo '匹配到了,结果为:';
var_dump($matches);
}else{
echo '没有匹配到';
}
?>
結論:
上記の例では、0-5 は $string と一致しませんが、$string1 は成功します。 $string の最初の値は 6 であり、[0-5] の範囲内にないためです。
<?php
$zz = '/[a-zA-Z0-9_]\w/';
$string = 'ab';
$string1 = '9A';
if(preg_match($zz, $string, $matches)){
echo '匹配到了,结果为:';
var_dump($matches);
}else{
echo '没有匹配到';
}
?>
結論:
$string と $string1 はどちらも正常に一致します。 w は [a-zA-Z0-9_] なので
<?php
$zz = '/[abc]\d+/';
$string = 'a9';
$string1 = 'b1';
$string2 = 'c5';
$string3 = 'd4';
if(preg_match($zz, $string, $matches)){
echo '匹配到了,结果为:';
var_dump($matches);
}else{
echo '没有匹配到';
}
?>
結論:
$string、$string1、$string2 は正常に一致しますが、$string3 は一致しません。 $string3は[abc]の範囲を超えているため、dから始まります。
[^ 文字] は指定された範囲の文字と一致しません
<?php
$zz = '/[^0-9A-Za-z_]/';
$string = 'aaaaab311dd';
$string1 = '!$@!#%$#^##';
if(preg_match($zz, $string, $matches)){
echo '匹配到了,结果为:';
var_dump($matches);
}else{
echo '没有匹配到';
}
?>
結論:
1. $string のマッチングは失敗しましたが、$string1 のマッチングでは成功しました。角括弧内にサーカムフレックス文字があるためです。
2.^ 角括弧内のサーカムフレックス文字の機能は、角括弧内の文字と一致することではありません。
概要:
原子 | 同等の式 |
---|
w | [a-zA-Z0-9_] |
W | [^a-zA- Z0-9_] |
d | [0-9] |
D | [^0-9] |
s | [tnfr] |
S | [^ tn fr] |
次のセクション<?php
$zz = '/[^0-9A-Za-z_]/';
$string = 'aaaaab311dd';
$string1 = '!$@!#%$#^##';
if(preg_match($zz, $string, $matches)){
echo '匹配到了,结果为:';
var_dump($matches);
}else{
echo '没有匹配到';
}
?>