PHPの正規表現表現におけるア...LOGIN

PHPの正規表現表現におけるアトム

Atom

アトムとは、正規表現の最小単位であり、端的に言えば、アトムは照合する必要があるコンテンツです。有効な正規表現には、少なくとも 1 つのアトムが含まれている必要があります。

目に見える文字も目に見えない文字もすべてアトムです

説明: スペース、キャリッジリターン、ラインフィード、0-9、A-Za-z、中国語、句読点、特殊記号はすべてアトムです。

アトミックな例を行う前に、まず関数 preg_match:

int preg_match (string $ Regular, string $string[, array &$result]) について説明しましょう

関数: $regulator 変数 $string に従って照合します変数。存在する場合は、一致の数を返し、一致した結果を $result 変数に入れます。結果が見つからない場合は 0 が返されます。

注: 上記は、preg_match で一般的に使用される主なパラメータです。他のいくつかのパラメーターは上にリストしませんでした。他の 2 つのパラメーターがあまりにも一般的でないためです。

実験を通して証明してみましょう:

<?php
//定义一个变量叫zz,放正则表达示。为了方便大家记忆,如果你英文比较ok,建议把变量名还是写成英文的$pattern。
$zz = '/a/';

$string = 'ddfdjjvi2jfvkwkfi24';

if(preg_match($zz, $string, $matches)){
   echo '匹配到了,结果为:';
   var_dump($matches);
}else{
   echo '没有匹配到';
}

?>

なぜなら、私が望んでいるのは a と一致することであり、$string が存在しないため、それは失敗します。

<?php
$zz = '/wq/';

$string = 'ssssswqaaaaaa';

if(preg_match($zz, $string, $matches)){
   echo '匹配到了,结果为:';
   var_dump($matches);
}else{
   echo '没有匹配到';
}

?>

上記の文字列のsの後にwqがあるのでマッチング成功です。

次に、スペースを一致させてみましょう:

<?php
$zz = '/ /';

$string = 'sssssw aaaaa';

if(preg_match($zz, $string, $matches)){
   echo '匹配到了,结果为:';
   var_dump($matches);
}else{
   echo '没有匹配到';
}

?>

実行結果は次のようになります:

QQ截图20161114135142.png

$string変数のw文字の後にスペースがあるためです。したがって、一致は成功し、文字列型が長さ 1 で出力されます。ただ、私たちの肉眼は目に見えず、この文字列を見ることができません。

特別に識別された原子

[ ]


これを覚えておく必要があります。ディクテーションレベルに達するのが最善です。覚えるときは、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.^ 角括弧内のサーカムフレックス文字の機能は、角括弧内の文字と一致することではありません。

概要:

atom説明
dは0-9と一致します
D 0-9 を除くすべての文字
w a-zA-Z0-9_
W0-9A-Za-z_を除くすべての文字
sスペース以外のすべての空白文字と一致します
Sすべて非空白文字
原子の指定範囲
原子同等の式
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 '没有匹配到'; } ?>
コースウェア