博客列表 >正则表达式的学习

正则表达式的学习

李明伟的博客
李明伟的博客原创
2019年05月02日 15:04:11880浏览

正则表达式

——一个完整的正则表达式有两部分构成:元字符和文本字符

元字符就是具有特殊含义的字符,文本字符就是普通的文本

行定位符 ‘^’和‘$’

'^'表示行的开始

^tm表示所匹配的字符串tm的开始位置必须是行头,也就是说被匹配的字符串的开头必须是tm

'$'表示行的结束

tm$表示所匹配的字符串tm的开始位置必须是结尾,也就是说被匹配的字符串的结尾必须是tm

单词分界符 ‘\b’和'\B'

'\b'表示匹配的文本必须是单独的单词

\btm\b只能匹配到tm,如html或utmost中的tm就无法匹配

'\B'表示匹配的文本不能是单独的单词

与'\b'正好相反

字符类([])

一个方括号只能匹配一个字符

要匹配不区分大小写的tm可以写作[T|t][M|m]

[0-9]([:digist:])十进制数字集合

[a-zA-Z0-9]([[:alnum:]])字母和数字集合

[a-zA-Z]([[:alpha:]])字母合集

[[;blank:]]刻空格和制表符

[[:xdigit:]十六进制数字

[[:punct:]]特殊字符合集

[[:print:]]可打印字符

[[:space:]]空白字符

[[:graph:]]所有可打印的字符

[A-Z]([[:upper:]])所有大写字母

[a-z]([[:lower:]])所有小写字母

[[:cntrl:]]控制字符

选择字符(|)

(T|t)(M|m)意思是以字母T或t开头,后面接一个字母M或m

连字符(-)

连字符可以表示字符的范围——如:[a-z],[A-Z],[0-9]

排除字符[^]

匹配不符合变量命名规则的变量

[^a-zA-Z]匹配不是以字母和下划线开头的变量名

限定符(?*+{n,m})

?匹配前面的字符零次或一次

colou?r匹配的是color和colour

+匹配前面的字符一次或多次

go+gle匹配的范围是gogle到goo....gle

*匹配前面的字符零次或多次

go*gle匹配的范围是ggle到goo...gle

{n}匹配前面的字符nci

go{2}gle只匹配google

{n,}匹配前面的字符最少n次

go{2,}gle只匹配到google到goo...gle

{n,m}匹配前面的字符最少n次,最多m次

go[2,4]gle只匹配到google,gooogle,goooogle

点号字符(.)

可以匹配出换行符外的任意一个字符

转义字符(\)

与php的转义字符大体一致

反斜线(\)

除了作为转义字符,还有其他功能

反斜线显示的不可打印的字符

\a警报

\b退格

\e Escape

\f换页符

\n换行符

\r回车符

\t水平制表符

\xhh十六进制代码

\ddd八进制代码

\cx即control-x的缩写

反斜线指定的预定义字符集

\d任意一个十进制数字,相当于[0-9]
\D任意一个非十进制数
\s任意一个空白字符
\S任意一个非空白字符
\w任意一个单词字符相当于[a-zA-Z0-9]
\W任意一个费单词字符

反斜线定义断言的限定符

\b单词分界符
\B非单词分界符序列
\A总是能够匹配待搜索文本的起始位置
\Z表示在未指定任何模式下匹配的字符
\z只匹配字符串的末尾,而不考虑任何换行符
\G当前匹配的其实位置

括号字符(())

小括号字符的第一个作用就是可以匹配改变限定字符的作用范围,如“|”,“*”,“^”

第二个作用是分组

反向引用

依靠子表达式的“记忆”功能来匹配连续出现的字串和字母

(it)\1首先将it作为分组,然后在后面加上"\1"表示匹配连续两个it

模式修饰符           

i 忽略大小写模式 

M 多文本模式

s 单文本模式

X 忽略空白字符

模式修饰符既可以写在正则表达式的外面,也可以写在表达式内,如忽略大小写模式,可以写为"/tm/i","(?i)tm(?-i)","(?i:tm)三种格式

php正则表达式的函数

//正则调试函数
function display($data = null)
{
    //获取参数类型标识符,转为小写字母
    $type = strtolower(gettype($data));
    switch ($type) {
        //如果没有定义,则输出NULL
        case 'null':
            echo 'NULL';
            break;
        //如果参数是数组或者对象,就直接格式化输出
        case 'array':
        case 'object':
            echo '<pre>';
            print_r($data);
            break;
        //默认为普通变量,则直接输出
        default:
            echo $data;
            break;
    }
}

//$data = range(1,10);
//display($data);

//php自带的正则验证函数
//preg_match($pattern,$subject,$matches)返回第一次匹配的结果
//preg_match_all($pattern,$subject,$matches)
//
//
//$pattern = '/[0-9]{1,2}/';
//$subject = '0123456789';
//$matches = [];
////preg_match($pattern,$subject,$matches)
////如果匹配成功返回true,否则返回false
//if (preg_match($pattern, $subject, $matches)) {
//    display($matches);
//} else {
//    echo '验证失败';
//}
////preg_match_all()匹配所有的查询结果
//if (preg_match_all($pattern, $subject, $matches)) {
//    display($matches);
//}else{
//    echo '验证失败';
//}
//preg_grep(string pattern,array input)函数
//函数功能——使用数组input中的元素一一匹配表达式pattern,最后返回所有相匹配的元素所组成的数组
$preg = '/\d{3,4}-?\d{7,8}/';
$arr = array('0432112345678','0431-7654321','12345678');
$preg_arr = preg_grep($preg,$arr);
echo var_export($preg_arr,true).'<hr>';
//preg_match()和preg_match_all()函数
//preg_match/preg_match_all(string pattern,string subject,array matches)
//函数功能:在字符串subject中匹配表达式pattern。函数返回匹配的次数。如果有数组matches,那么
//每次匹配的结果都将被存储到数组matches中
//preg_match()的返回值为0或1,因为该函数在匹配成功后就停止继续查找了
//preg_match_all()函数则会一只哦匹配到最后才结束
$str = 'This is an example!';
$preg = '/\b\w{2}\b/';
$num1 = preg_match($preg,$str,$str1);
echo $num1.'<br>';
echo var_export($str1,true).'<hr>';
$num2 = preg_match_all($preg,$str,$str2);
echo '<p>'.$num2.'<br>';
echo var_export($str2,true).'<hr>';
//preg_quote(string str,string delimiter)函数
//函数功能:将字符串str中的所有特殊字符进行自动转义,如果有参数delimiter,那么该函数所包含的字串也将被转义。
//函数返回转义后的字串,如果有参数delimiter,那么该参数所包含的字符串也将被转义
$str = '!、$、^、*、+、.、[、]、\\、/、b、<、>';
$str2 = 'b';
$match_one = preg_quote($str,$str2);
echo $match_one.'<hr>';

//preg_replace(pattern,replacement,subject,limit)函数
//函数功能:该函数在字符串subject中匹配表达式pattern,并将匹配项替换成字串replacment,如果有参数limit,则替换limit次
$string = '[b]粗字体[/b]';
$b_rst = preg_replace('/\[b\](.*)\[\/b\]/i','<b>$1</b>',$string);
echo $b_rst;

//preg_replace_callback(pattern,callback,subject,limit)函数
//与前者类似,多一个回调函数

//preg_split(pattern,subject,limit)
//函数功能:使用表达式pattern来分割字符串subject,如果有参数limit,那么数组最多有limit个元素


声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议