php 正则表达示中的原子

原子

原子是正则表达示里面的最小单位,原子说白了就是需要匹配的内容。一个成立的正则表达示当中必须最少要有一个原子。

所有可见不可见的字符就是原子

说明:我们见到的空格、回车、换行、0-9、A-Za-z、中文、标点符号、特殊符号全为原子。

在做原子的实例前我们先来讲解一个函数,preg_match:

int preg_match ( string $正则 , string $字符串 [, array &$结果] )

功能:根据$正则变量,匹配$字符串变量。如果存在则返回匹配的个数,把匹配到的结果放到$结果变量里。如果没有匹配到结果返回0。

注:上面是preg_match常用的主要几个参数。我在上面将另外几个参数没有列出来。因为,另外两个参数太不常用了。

我们来通过实验来证明:

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

$string = 'ddfdjjvi2jfvkwkfi24';

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

?>

因为我希望的是匹配a,而$string当是是不存在a的,所以不成功。

<?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以外的所有字符
\wa-zA-Z0-9_
\W除了0-9A-Za-z_以外的所有字符
\s匹配所有空白字符\n \t \r 空格
\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 匹配所有空白字符\n \t \r 空格

<?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[ \t\n\f\r]
\S[^ \t\n\f\r]
继续学习
||
<?php $zz = '/[^0-9A-Za-z_]/'; $string = 'aaaaab311dd'; $string1 = '!$@!#%$#^##'; if(preg_match($zz, $string, $matches)){ echo '匹配到了,结果为:'; var_dump($matches); }else{ echo '没有匹配到'; } ?>
提交重置代码
章节
笔记
提问
课件
反馈
捐赠

php入门教程之一周学会PHP

  • 推荐课程
  • 评论
  • 问答
  • 笔记
  • 课件下载
CL

CL

\W 匹配非 a~z A~Z 0~9 _ 中的代码有问题,把大写的W,写成了小写的w

2年前    添加回复 0

回复
人事易分°

人事易分°

表达式?

3年前    添加回复 0

回复
大白兔

大白兔

<?php //定义一个变量叫zz,放正则表达示。为了方便大家记忆,如果你英文比较ok,建议把变量名还是写成英文的$pattern。 $pattern = '/a/'; $string = 'dadadfsddsdsd'; if(preg_match($pattern, $string, $match)){ echo '匹配成功,结果:'; print_r($ma

3年前    添加回复 0

回复

关于抑扬符'^'的用法

[最新 寻觅 beyond 的回答]preg_match()只匹配一次,如果匹配到符合条件的内容就立即返回,不再继续匹配了,即使后面还有符合条件的。

时间:3年前

$zz = '/[0-5]\w+/'; 这个+号是干嘛用的,为什么后面有的例子里面没有?

[最新 路过 的回答][0-5]  可以匹配 0-5中的任意一个\w 匹配包括下划线的任何单词字符。等价于'[A-Za-z0-9_]'。$ 不在范围+ 标识一次或多次

时间:4年前

。。。。

。。。。

\d 匹配一个0-9 \D 除了0-9以外的所有字符 \w a-zA-Z0-9_ \W 除了0-9A-Za-z_以外的所有字符 \s 匹配所有空白字符\n \t \r 空格 \S 匹配所有非空白字符 [ ] 指定范围的原子

1个月前 0

Smthie

Smthie

原子 等价式 \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]

4个月前 0

移动用户-5695325

移动用户-5695325

\d匹配0-9的数字 , \D匹配除了0-9以外的字符 , \w匹配a-z0-9A-z的数字或大小写字母,\W匹配除了 a-z0-9A-Z以外的字符,\s匹配空格,\S除了空格以外的字符,[ ]匹配具体指定字符

1年前 0

YuShine Wei

YuShine Wei

\d 匹配一个0-9 \D 除了0-9以外的所有字符 \w a-zA-Z0-9_ \W 除了0-9A-Za-z_以外的所有字符 \s 匹配所有空白字符\n \t \r 空格 \S 匹配所有非空白字符 [ ] 指定范围的原子

1年前 0

吒哪

吒哪

1. preg_match ( string $正则 , string $字符串 [, array &$结果] )果存在则返回匹配的个数,把匹配到的结果放到$结果变量里。如果没有匹配到结果返回0。 2.\d 匹配一个0-9, \D 除了0-9以外的所有字符, \w a-zA-Z0-9_, \W 除了0-9A-Za-z_以外的所有字符, \s 匹配所有空白字符\n \t \r 空格, \S 匹配所有非空白字符, [ ] 指定范围的原子, 3..^ 抑扬符在中括号里面的作用是不准以中括号里面的字符进行匹配 \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],

1年前 0

挪威的森林

挪威的森林

正则字符串的匹配,可以用来校验用户的输入是否符合规范

2年前 0

展望45º天空

展望45º天空

原子 说明 \d 匹配一个0-9 \D 除了0-9以外的所有字符 \w a-zA-Z0-9_ \W 除了0-9A-Za-z_以外的所有字符 \s 匹配所有空白字符\n \t \r 空格 \S 匹配所有非空白字符 [ ] 指定范围的原子

2年前 0

筱笋尖

筱笋尖

/d 0-9 /D 非0-9 /w a-zA-Z0-9 /W 非a-zA-Z0-9 /s /n /t /r 所有空 /S 非/n /t /r 所有空 [ ]指定范围内的内容

2年前 0

No.1

No.1

preg_match(string$正则,string$字符串,[,array&$结果]) 返回匹配的个数

3年前 0

fighting&it'sme

fighting&it'sme

所有可见不可见的字符就是原子 说明:我们见到的空格、回车、换行、0-9、A-Za-z、中文、标点符号、特殊符号全为原子。

3年前 0

北海以北

北海以北

int preg_match ( string $正则 , string $字符串 [, array &$结果] ) 例 <?php //定义一个变量叫zz,放正则表达示。为了方便大家记忆,如果你英文比较ok,建议把变量名还是写成英文的$pattern。 $zz = '/a/'; $string = 'ddfdjjvi2jfvkwkfi24'; if(preg_match($zz, $string, $matches)){ echo '匹配到了,结果为:'; var_dump($matches); }else{ echo '没有匹配到'; } ?>

3年前 0

北海以北

北海以北

原子 说明 \d 匹配一个0-9 \D 除了0-9以外的所有字符 \w a-zA-Z0-9_ \W 除了0-9A-Za-z_以外的所有字符 \s 匹配所有空白字符\n \t \r 空格 \S 匹配所有非空白字符 [ ] 指定范围的原子

3年前 0

北海以北

北海以北

int preg_match ( string $正则 , string $字符串 [, array &$结果] )

3年前 0

小赢一场

小赢一场

原子 说明 \d 匹配一个0-9 \D 除了0-9以外的所有字符 \w a-zA-Z0-9_ \W 除了0-9A-Za-z_以外的所有字符 \s 匹配所有空白字符\n \t \r 空格 \S 匹配所有非空白字符 [ ] 指定范围的原子

3年前 0

阿大

阿大

\d 匹配一个0-9 \D 除了0-9以外的所有字符 \w a-zA-Z0-9_ \W 除了0-9A-Za-z_以外的所有字符 \s 匹配所有空白字符\n \t \r 空格 \S 匹配所有非空白字符 [ ] 指定范围的原子 \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]

3年前 0

课件暂不提供下载,工作人员正在整理中,后期请多关注该课程~