php正则表达式及其函数

正则表达式基础

1. ‘^’和 $’ 表示用来匹配字符串的开始和结束。(^有两种用法,下一种,见下面)
  • “^mtg”: 匹配以 “mtg”开头的字符串;
  • “mtg$”: 匹配以 “mtg” 结尾的字符串;
  • “^mtg$”: 匹配以mtg开头和以mtg结尾的字符串,实际上是只有abc与之匹配
2. ‘*’表示0次或者多次,‘+’表示1次或多次,‘?’表示0次或1次
  • “ab*”: 匹配字符串a和0个或者多个b组成的字符串
  • “ab*”: 匹配字符串a和1个或者多个b组成的字符串
  • “ab?”: 匹配字符串a和0个或者1个b组成的字符串
3. 大括号里面控制字符出现的个数
  • “ab{2}”: 匹配一个a后面只跟两个b;
  • “a(bc){2,}”: 匹配一个a至少跟两个bc;
  • “ab{3,5}”: 匹配一个a跟3到5个b”.
4.字符 ‘│’, 相当于OR 操作
  • “(a│bc)de”: 匹配含有 “ade” 或者 “bcde”的字符串;
5.一个点’.’可以代表除换行符之外的任意单个字符,中括号括住的内容只匹配一个单一的字符
  • “a.[0-9]”: 匹配一个a跟一个字符再跟一个数字
如果需要匹配包含换行符在内的任意字符
"([\s\S]*)" 或"([\d\D]*)" 或"([\w\W]*)" 来表示。
6.[^x]:匹配除了 x 意外的任意字符
  • “[^x]*”: 表示匹配除x外的任意字符
7.常用的元字符
  • “\w”: 匹配字母或数字或下划线
  • “\W”: \w的反义,即匹配任意非字母,数字,下划线和汉字的字符
  • “\d”: 匹配数字
  • “\D”: \d的反义,即匹配任意非数字的字符
  • “\s”: 匹配任意的空白符
  • “\S”: \s的反义,即匹配任意非空白符的字符
  • “\b”: 匹配单词的开始或结束
  • “\B”: \b的反义,即不是单词开头或结束的位置
    下面的代码是对\b的用法的实例,preg_match_all()函数下面将介绍:
$str="hi history";
preg_match_all("/\bhi\b/",$str,$arr);
preg_match_all("/hi/",$str,$arr1);
var_dump($arr);
var_dump($arr1);

输出为:


array(1) {
  [0]=>
  array(1) {
    [0]=>
    string(2) "hi"
  }
}
array(1) {
  [0]=>
  array(2) {
    [0]=>
    string(2) "hi"
    [1]=>
    string(2) "hi"
  }
}

即”\b”只匹配单个的单词

8.正则表达式中需要转义的特殊字符:
* . ? + $ ^ [ ] ( ) { } | \ / " " 

如[,如果需要转义使用 \[;
下面的代码是关于\[的使用代码:

$str="[123]";
preg_match_all("/\[([^\]]*)\]/",$str,$arr);//更简单的正则式为
"/\[(.*)\[/"

var_dump($arr);

输出为

array(2) {
  [0]=>
  array(1) {
    [0]=>
    string(5) "[123]"
  }
  [1]=>
  array(1) {
    [0]=>
    string(3) "123"
  }
}
9.preg_match()函数:

函数原型:
int preg_match( string pattern, string subject [, array matches ] )成功返回 1 ,否则返回 0 。

参数:

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

提示:preg_match() 第一次匹配成功后就会停止匹配,如果要实现全部结果的匹配,即搜索到subject结尾处,则需使用 preg_match_all() 函数。
例如:

$str=" aabab ";
preg_match("/a.*?b/",$str,$arr);

var_dump($arr);

输出为


array(1) {
  [0]=>
  string(3) "aab"
}
10.preg_match_all()函数:

函数原型:
int preg_match_all( string pattern, string subject, array matches [, int flags ] )
成功返回整个模式匹配的次数(可能为零),如果出错返回 FALSE 。
参数:

  • 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:如果设定本标记,对每个出现的匹配结果也同时返回其附属的字符串偏移量
$str=" <p>abcde</p> <p>fghij</p> ";
preg_match_all("/<p>(.*?)<\/p>/",$str,$arr);

var_dump($arr);
array(2) {
  [0]=>
  array(2) {
    [0]=>
    string(12) "<p>abcde</p>"
    [1]=>
    string(12) "<p>fghij</p>"
  }
  [1]=>
  array(2) {
    [0]=>
    string(5) "abcde"
    [1]=>
    string(5) "fghij"
  }
}
11.模式修正符的使用

这里写图片描述

12.贪婪模式(尽可能的匹配更多内容)和非贪婪模式(尽可能的匹配更少的内容)

如字符串aabab:

  • 贪婪模式:pattern为”/a.*b/”匹配的结果为aabab。
  • 非贪婪模式: pattern为”/a.*?b/”匹配的结果为aab和ab
13.向后引用

定义:当用“()”定义了一个正则表达式组后,正则引擎则会把被匹配的组按照顺序编号,存入缓存。当对被匹配的组进行向后引用的时候,可以用“\数字”的方式进行引用。”\1“引用第一个匹配的后向引用组,”\2”引用第二个组,以此类推,”\n”引用第n个组。而”\0”则引用整个被匹配的正则表达式本身。我们看一个例子。
假设你想匹配一个HTML标签的开始标签和结束标签,以及标签中间的文本。例如

<B>This is a test</B>

则pattern为

<(.*)>.*<\/\1>
14.常用正则表达式
  1. E-mail地址:^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$
  2. 2.URL:^[a-zA-Z]+://(\w+(-\w+)*)(\.(\w+(-\w+)*))*(\?\s*)?$
  3. 邮政编码:^[1-9]\d{5}$
  4. 手机号码:^((\(\d{2,3}\))|(\d{3}\-))?13\d{9}$
  5. 匹配HTML标记:<(.*)>.*<\/\1>|<(.*) \/>
  6. 提取信息中的图片链接:(s|S)(r|R)(c|C) *= *('|")?(\w|\|\/|\.)+('|"| *|>)?
  7. 提取信息中的中国手机号码:(86)*0*13\d{9}
  8. 提取信息中的中国固定电话号码:(\(\d{3,4}\)|\d{3,4}-|\s)?\d{8}
  9. 腾讯QQ号:`^[1-9]*[1-9][0-9]*$
  10. 千里码的一道题:写一个正则表达式来匹配这些符合要求的身份证号(出生年份在1985-1995的男性用户):^[\d]{6}19(8[5-9]|9[0-5])[\d]{6}[013579][0-9xX]$
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值