PHP正则使用

正则中的一些概念

元字符

1
2
3
4
5
6
7
8
9
10
11
12
13
. 匹配除换行符意外的任意字符
\w 匹配字母或数字或下划线
\s 匹配任意的空白符
\d 匹配数字
\b 匹配单词的开始或结束
^ 匹配字符串的开始
$ 匹配字符串的结束
[x] 匹配x字符,如匹配字符串中的 a、b 和 c 字符
\W \w的反义,即匹配任意非字母,数字,下划线和汉字的字符
\S \s的反义,即匹配任意非空白符的字符
\D \d的反义,即匹配任意非数字的字符
\B \b的反义,即不是单词开头或结束的位置
[^x] 匹配除了 x 意外的任意字符,如 [^abc] 匹配除了 abc 这几个字母之外的任意字符

重复

1
2
3
4
5
6
* 重复零次或更多次
+ 重复 1 次或更多次
? 重复零次或 1 次
{n} 重复 n 次
{n,} 重复 n 次或更多次
{n,m} 重复 n 到 m 次

模式修正符

1
2
3
4
5
6
7
8
9
i 模式中的字符将同时匹配大小写字母
m 字符串视为多行
s 将字符串视为单行,换行符作为普通字符
x 将模式中的空白忽略
e preg_replace() 函数在替换字符串中对逆向引用作正常的替换,将其作为 PHP 代码求值,并用其结果来替换所搜索的字符串。
A 强制仅从目标字符串的开头开始匹配
D 模式中的 $ 元字符仅匹配目标字符串的结尾
U 匹配最近的字符串
u 模式字符串被当成 UTF-8

PHP正则函数

在 PHP 应用中,正则表达式主要用于:

  1. 正则匹配:根据正则表达式匹配相应的内容
  2. 正则替换:根据正则表达式匹配内容并替换
  3. 正则分割:根据正则表达式分割字符串

PHP 正则表达式匹配 preg_match 与 preg_match_all 函数

preg_match()

preg_match() 函数用于进行正则表达式匹配,成功返回 1 ,否则返回 0 。

语法:

int preg_match( string pattern, string subject [, array matches ] )

参数说明:
pattern 正则表达式
subject 需要匹配检索的对象
matches 可选,存储匹配结果的数组, $matches[0] 将包含与整个模式匹配的文本,$matches[1] 将包含与第一个捕获的括号中的子模式所匹配的文本,以此类推

preg_match_all()

preg_match_all() 函数用于进行正则表达式全局匹配,成功返回整个模式匹配的次数(可能为零),如果出错返回 FALSE 。

语法:

int preg_match_all( string pattern, string subject, array matches [, int flags ] )

参数说明:
pattern: 正则表达式
subject: 需要匹配检索的对象
matches: 存储匹配结果的数组
flags: 可选,指定匹配结果放入 matches 中的顺序,可供选择的标记有:

1. PREG_PATTERN_ORDER:默认,对结果排序使 $matches[0] 为全部模式匹配的数组,$matches[1] 为第一个括号中的子模式所匹配的字符串组成的数组,以此类推
2. PREG_SET_ORDER:对结果排序使 $matches[0] 为第一组匹配项的数组,$matches[1] 为第二组匹配项的数组,以此类推
3. PREG_OFFSET_CAPTURE:如果设定本标记,对每个出现的匹配结果也同时返回其附属的字符串偏移量  

部分实例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
//1,过滤所有html标签的正则表达式:
</?[^>]+>
//2,过滤所有html标签的属性的正则表达式:
$html = preg_replace("/<([a-zA-Z]+)[^>]*>/","<\\1>",$html);
//3,过滤部分html标签的正则表达式的排除式(比如排除<p>,即不过滤<p>):
</?[^pP/>]+>
//4,过滤部分html标签的正则表达式的枚举式(比如需要过滤<a><p><b>等):
</?[aApPbB][^>]*>
//5,过滤部分html标签的属性的正则表达式的排除式(比如排除alt属性,即不过滤alt属性):
\s(?!alt)[a-zA-Z]+=[^\s]*
//6,过滤部分html标签的属性的正则表达式的枚举式(比如alt属性):
(\s)alt=[^\s]*

正则表达式中排除不需要匹配的字符串或字符
(1)排除不需要匹配的某个字符: 例: [^\w] 排除匹配中的一个数字或字符串

(2) 排除匹配中不需要的字符串:例:(?!元宝商城|游戏特权|图说新游|多玩策划|新游视频|娱乐视频|多玩演播室|多玩画报)

加上|用于或选择。上面列出的字符串都不会参与匹配


常用正则

  1. 删除空行: \r\n\r\n => \r\n\
  2. 删除有空格的空行: ^ +$ =>