一些正则表达式

1.元规则
\s 空白
\d 数字,相当于[0-9]
\w 字母,数字或下划线,相当于[a-zA-Z0-9_]
. 非换行符\n
“\s”,”\d”,”\w”,”\b” 对应的大写字母表示相反的意义。

[ ] 匹配其中任意一个字符
[^ ] 匹配其中字符之外的任意一个字符

次数匹配符,对前面的指定字符起作用:
? 相当于{0,1}
*  相当于{0,}
+  相当于{1,}

抽象特殊符号:边界匹配符
^ 行首
$ 行尾
\b 单词边界,”\b” 本身不匹配任何字符,但是它要求它在匹配结果中所处位置的左右两边,其中一边是 “\w” 范围,另一边是 非”\w” 的范围。
\B 与\b相反,非单词边界,即左右两边都是 “\w” 范围或者左右两边都不是 “\w” 范围时的字符缝隙。
\G 前一个匹配的结束

| 或,匹配左边或右边的表达式,不限制为单个字符,可以在小括号内使用。

( )在被修饰匹配次数的时候,括号中的表达式可以作为整体被修饰;
取匹配结果的时候,括号中的表达式匹配到的内容可以被单独得到;

2.一些高级规则

贪婪模式:”{m,n}”, “{m,}”, “?”, “*”, “+”,具体匹配的次数随被匹配的字符串而定。这种重复匹配不定次数的表达式在匹配过程中,总是尽可能多的匹配。

非贪婪模式:在 修饰匹配次数的特殊符号后再加上一个 “?” 号,则可以使匹配次数不定的表达式尽可能少的匹配,使可匹配可不匹配的表达式,尽可能的 “不匹配”。如果少匹配就会导致整个表达式匹配失败的时候,与贪婪模式类似,非贪婪模式会最小限度的再匹配一些,以使整个表达式匹配成功。

反向引用:表达式引擎会将小括号 ( )包含的表达式所匹配到的字符串记录下来,以使它可以单独获取。在应用中,当用某种边界来查找,而所要获取的内容又不包含边界时,使用小括号来指定所要的范围。比如“(.*?)

”。
小括号包含的表达式所匹配到的字符串不仅在匹配结束后可以使用,在匹配过程中也可以使用。表达式后边的部分,可以引用前面 “括号内的子匹配已经匹配到的字符串”。引用方法是 “\” 加上一个数字,例如”\1″ 引用第1对括号内匹配到的字符串,”\2″ 引用第2对括号内匹配到的字符串……,如果一对括号内包含另一对括号,则外层的括号先排序号。哪一对的左括号 “(” 在前,那这一对就先排序号。

如果希望匹配结果不进行记录供以后使用,可以使用 “(?:xxxxx)” 格式,它属于括号 “( )” 内的子表达式。

正向预搜索:

“(?=xxxxx)” :所在缝隙的右侧能够匹配 xxxxx 这部分表达式,它本身不被放入匹配结果中。
“(?!xxxxx)”  :所在缝隙的右侧不能匹配 xxxxx 这部分表达式。

反向预搜索:

“(?<=xxxxx)”:反向预搜索要求的条件是:所在缝隙的 “左侧”,两种格式分别要求必须能够匹配和必须不能够匹配指定表达式,而不是去判断右侧。与 “正向预搜索” 一样的是:它们都是对所在缝隙的一种附加条件,本身都不匹配任何字符。
“(?<!xxxxx)” :

对预搜索部分反向引用取值,要把预搜索语句再括起来,并且加上对应匹配内容,例如下面php正则作用是去掉audio|img|video|td|script这几个标签之外的空标签

$content=preg_replace("/<((?!(audio|img|video|td|script)).*?)[^>]*?>(\s|<br[^>]*\/?>| | ||\xe3\x80\x80|\xc2\xa0)*?<\/\\1>/i", "", $content);

3.
删除尾部到之前某个关键词(包括)之间的内容,这个可能改用字符串查找效率更高。

$content=preg_replace("/(?<=<\/div>)[\s\S]*$/i", "", $content);
 $content=preg_replace("/(?<=<\/div>)([\s\S](?!<\/div>))*$/i", "", $content);

4.常用的
[aA] : 对一个字母不分大小写