Blogger Information
Blog 40
fans 1
comment 0
visits 32701
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
正则表达式的学习
李明伟的博客
Original
886 people have browsed it

正则表达式

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

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

行定位符 ‘^’和‘$’

'^'表示行的开始

^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个元素


Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
0 comments
About us Disclaimer Sitemap
php.cn:Public welfare online PHP training,Help PHP learners grow quickly!