PHP开发基础教程之正则表达式中的原子

一、原子

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

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

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

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

语法:

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

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

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

我们来通过程序验证:

实例:代码如下

<?php
//定义一个变量pattern,存放正则表达式
$pattern = '/a/';
//待搜素字段
$string = 'ddfdjjvi2jfvkwkfi24';
//判断,如果匹配到了,输出$matcges的值
if(preg_match($pattern, $string, $matches)){
    echo '匹配到了,结果为:';
    var_dump($matches);
}else{
    echo '没有匹配到';
}
?>

结果:

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

改造这个例子

实例:代码如下

<?php
//定义一个变量pattern,存放正则表达式
$pattern = '/f/';
//待搜素字段
$string = 'ddfdjjvi2jfvkwkfi24';
//判断,如果匹配到了,输出$matcges的值
if(preg_match($pattern, $string, $matches)){
    echo '匹配到了,结果为:';
    var_dump($matches);
}else{
    echo '没有匹配到';
}
?>

结果:

上面的字符串里存在f,所以匹配成功

接下来我们匹配一个空格试试:

实例:如下

<?php
$zz = '/ /';
$string = 'sssssw aaaaa';
if(preg_match($zz, $string, $matches)){
    echo '匹配到了,结果为:';
    var_dump($matches);
}else{
    echo '没有匹配到';
}
?>

结果:

因上,$string这个变量的w字符后存在一个空格。所以匹配成功,输出了字符串类型,长度为1。只不过我们的肉眼不可见,看不到这个字符串而已。

二、特殊标识的原子

19.png

注:这里每一个都需要记住,最好达到默写级别。记忆的时候成对记忆,\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
header("Content-type:text/html;charset=utf-8");
$zz = '/\D/';
$string = '121243中23453453';
if(preg_match($zz, $string, $matches)){
    echo '匹配到了,结果为:';
    var_dump($matches);
}else{
    echo '没有匹配到';
}
?>

五、\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 '没有匹配到';
}

?>

七、\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 '没有匹配到';
}

?>

再试一下将$string改为$string1,看看是不是匹配到了

结论:
上例中0-5匹配$string失败,而$string1成功。因为,$string中的第一个数值为6,不在[0-5]的范围之内。

十、[^ 字符] 不匹配指定区间的字符

代码如下:

<?php

$zz = '/[^0-9A-Za-z_]/';

$string = 'aaaaab311dd';

$string1 = '!$@!#%$#^##';

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

?>

结论:

匹配$string不成功,但是匹配$string1的时候成功。因为中括号里面有个抑扬符。

^ 抑扬符在中括号里面的作用是不准以中括号里面的字符进行匹配。

十一、总结

20.png

继续学习
||
<?php //定义一个变量pattern,存放正则表达式 $pattern = '/a/'; //待搜素字段 $string = 'ddfdjjvi2jfvkwkfi24'; //判断,如果匹配到了,输出$matcges的值 if(preg_match($pattern, $string, $matches)){ echo '匹配到了,结果为:'; var_dump($matches); }else{ echo '没有匹配到'; } ?>
提交重置代码
章节
笔记
提问
课件
反馈
捐赠

新版php入门教程