php正则表达式入门

之前学python的时候看过python里的正则, 也就是re, 最近这段时间看php, 看到了正则, 也就把正则从新复习了一遍。 其实正则也可以说是一种编程语言, 它和asm一样, 可以嵌套到很多程序当中去, 进行删除,修改,替换。说到正则,首先应该想了, 什么是正则? 正则就是描述字符串排列模式的一种自定义的语法规则,它本身也是属于是一段字符串,要和函数配合使用。 正则是由定界符,原子,元字符,模式修正符组成的,除了数字,字母和\的任意其他字符都可以被用来当作定界符,定界符的作用就是定界开始和结束,在正则中可以单独使用的字符都可以被称为原子, 比如\s \d \t \r src img, 如果想要在原子中使用具有特殊意义的字符, 比如这个字符既属于元字符还想在原子中使用, 即可以把它使用\转义, 元字符是用来被修饰原子的, 比如匹配<>中的任意十进制数字, 就可以使用<\d>, 可以使用[]表示是一个原子表,比如匹配一定范围的内容[1234567],即代表匹配原子表中的任意一个数字, 如果不加中括号, 即代表匹配的是一个连贯的数字,还可以在原子表中的第一个字符前加^表示取反,可以使用-代表一个范围。现在php沿用的正则是与perl兼容的, 下面就来看几个例子。

首先说一下, 几个常见的匹配原子和元字符

\d 匹配任意十进制数

\D 匹配任意非数字

\s 匹配任意空白和空白字符

\S 匹配任意非空白

\w 匹配a-zA-Z0-9_

\W 匹配非a-zA-Z0-9_

* 匹配任意字符0次或者多次 (php中的元字符*作为元字符使用时不能单独使用,要配合原子使用,修饰自身之前原子)

+ 匹配任意字符一次或者多次 (至少要出现一次,修饰自身之前原子)

^ 取反

下面来看一个例子

该函数的意思是执行一个正则表达式匹配,支持 php4,5,7。

int preg_match ( string $pattern , string $subject [, array &$matches [, int $flags = 0 [, int $offset = 0 ]]] )

第一个变量是一个字符串,代表的是一个匹配模式, 也就是正则, 第二个是被匹配的字符串, 也就是输入的信息,第三个$matches代表的是如果给它提供了参数它将会被填充为结果, 同时它支持数组用法, 如果$matches[0]代表的是将完整的匹配模式匹配到文本,$matches[1]代表的是第一个子匹配模式匹配到文本..flags提供了一个参数PREG_OFFSET_CAPTURE,如果使用了该参数即代表会对每一个匹配的结果附加字符串偏移量。 $offset指定搜索位置, 单位是字节, 可以指定从x字节位开始搜索。 一般情况下, 我们只需要用到$pattern 和 $subject。 如果preg_match匹配失败, 将会返回false。

<?php

$pat = '/\d/';
$s = '01234567a.zd';
if(preg_match($pat,$s))
{
    echo '我已经被匹配出来了';
}
else
{
    echo '匹配失败了!';
}

///////////////////
<?php

$pat = '/123456789/';
$s = '012349a.zd';
if(preg_match($pat,$s))
{
    echo '我已经被匹配出来了';
}
else
{
    echo '匹配失败了!';
}

因为\d代表的是匹配十进制数的0-9, 匹配的字符串里虽然包含了非数字的信息, 但是也包含了十进制数0-9之间的几个数, 所以会提示, 我已经被匹配出来了。 但是如果匹配采用的是实际意义的数字, 并且不是属于原子表,即代表必须包含这些连贯的数字, 所以会提示, 匹配失败了。

<?php

$pat = '/\D/';
$s = '0123456789';
if(preg_match($pat,$s))
{
    echo '我已经被匹配出来了';
}
else
{
    echo '匹配失败了!';
}

匹配非数字, 所以会提示, 匹配失败了!

<?php

$pat = '/\s/';
$s = ' \r \t \n \p ';
if(preg_match($pat,$s))
{
    echo '我已经被匹配出来了';
}
else
{
    echo '匹配失败了!';
}

匹配字符中包含空格也包含空格符, 所以匹配成功。

<?php

$pat = '/\w/';
$s = '09838292732712aAJDIJSKZzjss_as()';
if(preg_match($pat,$s))
{
    echo '我已经被匹配出来了';
}
else
{
    echo '匹配失败了!';
}

包含数字和字母中的匹配, 所以提示, 我已经被匹配出来了。 其它的以此类推。 比如匹配一个范围

<?php

$pat = '/[0-9]/';
$s = 'asasdasfdas';
if(preg_match($pat,$s))
{
    echo '我已经被匹配出来了';
}
else
{
    echo '匹配失败了!';
}

因为匹配的是0-9之间的任意数字,所以会提示, 匹配失败。

<?php

$pat = '/[^0-9]/';
$s = 'asasdasfdas';
if(preg_match($pat,$s))
{
    echo '我已经被匹配出来了';
}
else
{
    echo '匹配失败了!';
}

匹配非0-9, 所以会提示, 我已经被匹配出来了 。 表面上看, 正则很乱, 没有顺序的样子 ,其实正则也是具有一定意义的语法规则, 只要了解了它的组成和用法用起来也很简单。

此条目发表在php分类目录,贴了, , 标签。将固定链接加入收藏夹。

发表评论

电子邮件地址不会被公开。 必填项已用*标注