正则表达式学习一(基础)

来源:互联网 发布:禅道 mac 安装 编辑:程序博客网 时间:2024/05/16 03:22

这几天遇到了用到正则的地方,以前很怕正则~~~~(>_<)~~~~ 今上午终于把它给弄出个所以然来了~\(≧▽≦)/~啦啦啦

这可是哥亲自手打出来的……

一、普通字符、元字符组成的正则表达式

1.      c  c是一个或多个普通字符例如,”b”匹配字符串b,”abc”匹配字符串”abc”

<?php

$pattern="/abc/";

$mystring="dadbccabcdefg";

 

preg_match($pattern,$mystring,$result);

print_r($result);

echo$result[0];//abc

?>

2.      {n} n表示匹配确定的n次。例如,o{2}必须两个连续的o,不能匹配bob中的o,而能匹配google中的o

<?php

$pattern="/abc{2}/";

$mystring="dabccabcdefg";

 

preg_match($pattern,$mystring,$result);

print_r($result);

echo$result[0];//abcc

?>

3.      {n,}同上一个,不过这里是至少匹配n

<?php

$pattern="/abc{2}/";

$mystring="dabccabcdefg";

 

preg_match($pattern,$mystring,$result);

print_r($result);

echo$result[0];//abccc

?>

4.      {n,m} 同上,至少匹配n次,最多m

<?php

$pattern="/abc{2,4}/";

$mystring="dabcccccabcdefg";

 

preg_match($pattern,$mystring,$result);

print_r($result);

echo$result[0];//abcccc

?>

5.      转义字符

6.      ^匹配输入字符串的开始位置。例如,^a不匹配ana中的最后一个a,匹配第一个a

^ab 不能匹配bab如果设置了模式修正符为m,也匹配换行符和回车符之后的位置(\n  \r

<?php

$pattern="/^abc/";

$mystring="abcdda";

 

preg_match($pattern,$mystring,$result);

print_r($result);

echo$result[0];//abc

?>

7.      $  同上但匹配的是结束位置

<?php

$pattern="/abc$/";

$mystring="abcdabc";

 

preg_match($pattern,$mystring,$result);

print_r($result);

echo$result[0];//abc 匹配的是最后一个abc

?>

8.      等价于{0,}即匹配前面的字符或子表达式0次或多次例如zo*能匹配z以及zoo(着这里匹配子表达式是:o,而不是zo,只要匹配z就可以了,o零次都可以)

<?php

$pattern="/abc*/";

$mystring="ab";

 

preg_match($pattern,$mystring,$result);

print_r($result);

echo$result[0];//ab

?>

9.      +同上。等价于{1,}即匹配前面的字符或子表达式0次或多次例如zo+能匹配zo以及zoo但不匹配z

10.  ?等价于{0,1},当该字符跟在任何一个其他限制符(*+?{n}{n,},{n,m}后面时,匹配模式是“非贪心”的。“非贪心”搜索到的尽可能短的字符串,而默认贪心则尽可能长,例如,”oooo”中,”o+?”只能匹配单个oo+匹配所有的o*  +  都称为贪心的。

11.  .匹配除”\n”之外的任何单个字符。若要匹配\n在内的任意字符,请使用诸如[\s\S]之类的模式

12.  x|y匹配x例如z|flood匹配 zflood

13.  [xyz]字符集合匹配所包含的任何一个字符,例如[abc]匹配plain中的a,也可以匹配bea中的b

14.  [^xyz]匹配未包含的任意字符。例如,[^abc]可以匹配plainp

15.  [a-z]字符范围,匹配指定范围的任意字符[a-z][0-9][A-Z],例如^[A-Za-z0-9]表示由数字和26个英文字母组成的字符串

16.  [^a-z]匹配任何不在指定范围内的任意字符。

二、正则表达式转义语法

1.      \b匹配一个单词该单词必须位于边界,也就是指单词边必须有空格。例如”er\b”可以匹配never中的er(这时er位于边界)但不能匹配verb中的er(这时er没有位于边界)

2.      \B与上一个相反,”er\B”能匹配verb中的er但不能匹配never中的

3.      cx匹配由x指定的ASCII控制字符。例如,\cC匹配Ctrl+C,\cM匹配一个Ctrl+M(一个换行符),x的值必须位于a-zA-Z中否则将c视为一个原义的c字符本身

<?php

$pattern="/d\cM/";

$mystring="d

sdf";

 

preg_match_all($pattern,$mystring,$result);

print_r($result);//Array ( [0] => Array ( [0] => d) ) 

echo$result[0];

?>

4.      \d等价于[0-9] ,\D等价于[^0-9]

5.      \f匹配一个换页符等价于\x0ccL;\n匹配一个换行符等价于\x0a\cJ;\r匹配一个回车符,等价于\x0d\cM;\s匹配任何单个空白字符,包括空格、制表符、换页符等等,等价于[\f\n\r\t\v]

$pattern="/\s[A-Za-z0-9]/";

$mystring="foobar";

 

preg_match_all($pattern,$mystring,$result);

print_r($result);//Array ([0] => Array ( [0] => b ) )

\S匹配任何单个字符,但不包含空白字符

<?php

$pattern="/\S[A-Za-z0-9]/";

$mystring="foobar";

 

preg_match_all($pattern,$mystring,$result);

print_r($result);//Array ( [0] => Array ( [0] => fo [1] => ba ) )

 

?>

    \t匹配一个制表符 \w等价于[A-Za-z0-9_]多一个下划线 \W如匹配50%中的%

     

三、正则表达式的捕获语法

(pattern)匹配pattern并捕获该匹配的字表达式   

(?:pattern) 不捕获匹配结果,这在使用或字符(|) 来组合一个模式的各个部分是很有用的,例如industr(?:y|ies)就是一个比industry|industries 更简略的表达式

(?=pattern)   (?!pattern)

 

圆括号包围的表达式被称为字表达式也称为捕获语法,他们将被存储起来用作他用

四、优先权顺序

\转义符    ()(?:)(?!)[]圆括号和方括号    *+?{n}{n,}{n,m}限定符   

^$\任何元字符位置和顺序

|或运算

五、常用函数

preg_match() preg_match_all()  preg_replace()   preg_split()