正则表达式

来源:互联网 发布:梦里花落知多少意思 编辑:程序博客网 时间:2024/06/10 10:52

正则表达式是用于描述字符排列和匹配模式的一种语法规则,它主要用于字符串的模式分割,匹配,查找及替换操作,在php正则表达式一般是由正规字符和一些特殊字符联合构成的一个文本模式的程序性描述,这里我们使用perl兼容正则表达式

定界符:~或者\或者#都可以作为正则表达式的定界符

1、原子

0)任意一个字符(.不能匹配换行符 \n)

 . 

遇到:

$subject="my name is lee \n how are you";

$pattern="/.*/";

preg_match_all()后会出现两次匹配:my name is lee和how are you

这时候就需要模式修正符: s(此时.可以匹配换行符\n),

结果只匹配一次:my name is lee how are you



1)单个字母、数字(必须配合模式单元()或者原子表[]使用)

a-z,A-Z,0-9

例如:www.baidu.com-->/[a-z]*\.[a-z]*\.[a-z]*/

2)模式单元

(abc)      匹配abc并且成一个单元

3)原子表

[abc]       里面的任意一个字符:a或b或c

4)重新使用的模式单元(用在正则替换)

\\1  引用正则表达式第一个()匹配的内容,\\2、\\3以此类推

$1  作用与\\1相同,官方建议使用$

$用在双引号里面时,需要转义,在单引号里面则不需要

5)普通转义字符

\d    匹配一个数字

\D   匹配一个非数字

\w   匹配字母、数字、下划线

\W  除了字母、数字、下划线

\s   匹配空白字符、空格、tab

\S   除了空白字符、空格、tab

6)转义元字符

\*\.\[\]

2、元字符

*,+,?,|,^,$,\b,\B,[],[^],{m},{m,n},()

\d*一个或多个或0个数字

\d+一个或多个数字

\d?一个或0个数字

 |

 $以什么结尾:(匹配内容)$,当匹配内容在最末尾时能匹配上,不一定要()

 ^以什么开头:^(匹配内容),当匹配内容在最前端时能匹配上,不一定要()

 \b词边缘(/\blinux/-->只能匹配到单独的linux,而aalinuxaa不能匹配)

 \B非词边缘

 [abc]里面的任意一个字符,a或b或c

 [^abc]里面除了a或b或c的任意一个字符

 {2}前面2个原子,(very){2}-->veryvery,中间不能有空格

 {2,}前面2个以上原子

 {2,5}前面2-5个原子

()

3、模式修正符(加在末尾定界符的后面)

 i忽略大小写

 m视为多行,会使^(php)失效,没有m时,最多只能匹配到一个结果(即最开头那个)

视为多行时,所有php都会匹配到

 s视为一行

 U贪婪模式,最大模式(匹配得比较细)

$subject="<b>LINUX</b>and php are lamp or <b>linux</b>is very much!";

$pattern='/<b>.*</b>/';

//普通模式匹配-->LINUX and php are lamp or linux(包含b标签效果)

$pattern='/<b>.*</b>/U';

//贪婪模式匹配(两次)-->LINUX和linux(包含b标签效果)

 e替换的时候用的(php已弃用e修饰符),可以用函数加工后向引用

$subject="123 mysql";
$pattern='/\d+\s(\w+)/e';
$replacement="strtoupper(\\1)";e可以识别$replacement内的函数



$subject=http://www.baidu.com/web/index.php

$pattern='/(\w+:\/\/)?.*\/\w+\/.*/';

上述正则表达式$pattern中:

开头和结尾都为,中间的/都需要转义:前面加;

两个\w+分别表示http和wed,:对应$subject中的:

两个.*分别表示www.baidu.com和index.php

中间所有/都一一对应$subject中的/,但是需要转义

(\w+:\/\/)?表示括号里面的部分是可有可无的

0 0