1 前言
2 什么是正则表达式:
3 正则表达式的基本语法:
下面就是一个完整的正则表达式的例子:
<font color="#000000"><font color="#0000bb"></font><font color="#007700">/</font><font color="#0000bb">hello</font><font color="#007700">.+?</font><font color="#0000bb">hello</font><font color="#007700">/</font><font color="#0000bb">is</font> </font> |
4 正则表达式的特殊字符:
*元字符:
- 大括号:大括号用来精确指定匹配元字符出现的次数,例如”/pre{1,5}/”表示匹配的对象可以是”pre”、”pree”、”preeeee”这样在”pr”后面出现1个到5个”e”的字符串。或者”/pre{,5}/”代表pre出现0此到5次之间。
- 加号:”+”字符用来匹配元字符前的字符出现一次或者多次。例如”/ac+/”表示被匹配的对象可以是”act”、”account”、”acccc”等在”a”后面出现一个或者多个”c”的字符串。”+”相当于”{1,}”。
- 星号:”*”字符用来匹配元字符前的字符出现零次或者多次。例如”/ac*/”表示被匹配的对象可以是”app”、”acp”、”accp”等在”a”后面出现零个或者多个”c”的字符串。”*”相当于”{0,}”。
- 问号:”?”字符用来匹配元字符前的字符出现零次或者1次。例如”/ac?/”表示匹配的对象可以是”a”、”acp”、”acwp”这样在”a”后面出现零个或者1个”c”的字符串。”?”在正则表达式中还有一个非常重要的作用,即”贪婪模式”。
- 还有两个很重要的特殊字符就是”[ ]”。他们可以匹配”[]”之中出现过的字符,比如”/[az]/”可以匹配单个字符”a”或者”z”;如果把上面的表达式改成这样”/[a-z]/”,就可以匹配任何单个小写字母,比如”a”、”b”等等。
- 如果在”[]”中出现了”^”,代表本表达式不匹配”[]”内出现的字符,比如”/[^a-z]/”不匹配任何小写字母!并且正则表达式给出了几种”[]”的默认值:
<font color="#000000"><font color="#0000bb"></font><font color="#007700">[:</font><font color="#0000bb">alpha</font><font color="#007700">:]</font><font color="#0000bb">:匹配任何字母 <br></font><font color="#007700">[:</font><font color="#0000bb">alnum</font><font color="#007700">:]</font><font color="#0000bb">:匹配任何字母和数字 <br></font><font color="#007700">[:</font><font color="#0000bb">digit</font><font color="#007700">:]</font><font color="#0000bb">:匹配任何数字 <br></font><font color="#007700">[:</font><font color="#0000bb">space</font><font color="#007700">:]</font><font color="#0000bb">:匹配空格符 <br></font><font color="#007700">[:</font><font color="#0000bb">upper</font><font color="#007700">:]</font><font color="#0000bb">:匹配任何大写字母 <br></font><font color="#007700">[:</font><font color="#0000bb">lower</font><font color="#007700">:]</font><font color="#0000bb">:匹配任何小写字母 <br></font><font color="#007700">[:</font><font color="#0000bb">punct</font><font color="#007700">:]</font><font color="#0000bb">:匹配任何标点符号 <br></font><font color="#007700">[:</font><font color="#0000bb">xdigit</font><font color="#007700">:]</font><font color="#0000bb">:匹配任何16进制数字</font> </font>*另外下面这些特殊字符在转义符号”\”转义后代表的含义如下:
- s:匹配单个的空格符
- S:用于匹配除单个空格符之外的所有字符。
- d:用于匹配从0到9的数字,相当于”/[0-9]/”。
- w:用于匹配字母,数字或下划线字符,相当于”/[a-zA-Z0-9_]/”。
- W:用于匹配所有与w不匹配的字符,相当于”/[^a-zA-Z0-9_]/”。
- D:用于匹配任何非10进制的数字字符。
- .:用于匹配除换行符之外的所有字符,如果经过修饰符”s”的修饰,”.”可以代表任意字符。
利用上面的特殊字符可以很方便的表达一些比较繁琐的模式匹配。例如”/\d0000/”利用上面的正则表达式可以匹配万以上,十万一下的整数字符串。
*定位字符:
定位字符是正则表达式中又一类非常重要的字符,它的主要作用是用于对字符在匹配对象中的位置进行描述。
- ^:表示匹配的模式出现在匹配对象的开头(和在”[]”里面不同)
- $:表示匹配的模式出现在匹配对象的末尾
- 空格:表示匹配的模式出现在开始和结尾的两个边界之一
- “/^he/”:可以匹配以”he”字符开头的字符串,比如hello、height等等;
- “/he$/”:可以匹配以”he”字符结尾的字符串即she等;
- “/ he/”:空格开头,和^的作用一样,匹配以he开头的字符串;
- “/he /”:空格结束,和$的作用一样,匹配以he结尾的字符串;
- “/^he$/”:表示只和字符串”he”匹配。
*括号:
正则表达式除了可以用户匹配,还可以用括号”()”来记录需要的信息,储存起来,给后面的表达式读取。
<font color="#000000"><font color="#0000bb"></font><font color="#007700">/^([</font><font color="#0000bb">a</font><font color="#007700">-</font><font color="#0000bb">zA</font><font color="#007700">-</font><font color="#0000bb">Z0</font><font color="#007700">-</font><font color="#0000bb">9_</font><font color="#007700">-]+)@([</font><font color="#0000bb">a</font><font color="#007700">-</font><font color="#0000bb">zA</font><font color="#007700">-</font><font color="#0000bb">Z0</font><font color="#007700">-</font><font color="#0000bb">9_</font><font color="#007700">-]+)(.[</font><font color="#0000bb">a</font><font color="#007700">-</font><font color="#0000bb">zA</font><font color="#007700">-</font><font color="#0000bb">Z0</font><font color="#007700">-</font><font color="#0000bb">9_</font><font color="#007700">-])$/</font><font color="#0000bb"></font> </font> |
就是记录邮件地址的用户名,和邮件地址的服务器地址(形式为username@server.com之类的),在后面如果想要读取记录下来的字符串,只是需要用”转义符+记录的次序”来读取。比如”\\1″就相当于第一个”[a-zA-Z0-9_-]+ “,”\\2″相当于第二个([a-zA-Z0-9_-]+),”\\3″就是第三个(.[a-zA-Z0-9_-])。但是在PHP中,”\”是一个特殊的字符,需要转义,所以”\1″到了PHP的表达式中就应该写成”\\\\1″。
其他特殊符号:
“|”:或符号”|”和PHP里面的或一样,不过是一个”|”,而不是PHP的两个”||”!意思就是可以是某个字符或者另一个字符串,比如”/abcd|dcba/”可能匹配”abcd”或者”dcba”。
5 贪婪模式:
前面在元字符中提到过”?”还有一个重要的作用,即”贪婪模式”,什么是”贪婪模式”呢? 比如我们要匹配以字母”a”开头字母”b”结尾的字符串,但是需要匹配的字符串在”a”后面含有很多个”b”,比如”a bbbbbbbbbbbbbbbbb”,那正则表达式是会匹配第一个”b”还是最后一个”b”呢?如果你使用了贪婪模式,那么会匹配到最后一个”b”,反之只是匹配到第一个”b”。
<font color="#000000"><font color="#0000bb"></font><font color="#007700">/</font><font color="#0000bb">a</font><font color="#007700">.+?</font><font color="#0000bb">b</font><font color="#007700">/<br>/</font><font color="#0000bb">a</font><font color="#007700">.+</font><font color="#0000bb">b</font><font color="#007700">/</font><font color="#0000bb">U</font> </font> |
<font color="#000000"><font color="#0000bb"></font><font color="#007700">/</font><font color="#0000bb">a</font><font color="#007700">.+</font><font color="#0000bb">b</font><font color="#007700">/</font><font color="#0000bb"></font> </font> |
上面使用了一个修饰符U,详见下面的部分。
6 修饰符:
在正则表达式里面的修饰符可以改变正则的很多特性,使得正则表达式更加适合你的需要(注意:修饰符对于大小写是敏感的,这意味着”e”并不等于”E”)。正则表达式里面的修饰符如下:
- i :如果在修饰符中加上”i”,则正则将会取消大小写敏感性,即”a”和”A” 是一样的。
- m:默认的正则开始”^”和结束”$”只是对于正则字符串如果在修饰符中加上”m”,那么开始和结束将会指字符串的每一行:每一行的开头就是”^”,结尾就是”$”。
- s:如果在修饰符中加入”s”,那么默认的”.”代表除了换行符以外的任何字符将会变成任意字符,也就是包括换行符!
- x:如果加上该修饰符,表达式中的空白字符将会被忽略,除非它已经被转义。
- e:本修饰符仅仅对于replacement有用,代表在replacement中作为PHP代码。
- A:如果使用这个修饰符,那么表达式必须是匹配的字符串中的开头部分。比如说”/a/A”匹配”abcd”。
- E:与”m”相反,如果使用这个修饰符,那么”$”将匹配绝对字符串的结尾,而不是换行符前面,默认就打开了这个模式。
- U:和问号的作用差不多,用于设置”贪婪模式”。