php正则表达式的主要作用是:分割、匹配、查找、替换

正则表达式中包括的元素:

原子(普通字符:a-z A-Z 0-9 、原子表、转义字符)

元字符(有特殊功能的字符)

模式修正符(系统内置部分字符 i 、m、S、U...)

转义字符

\d 包含所有数字[0-9]

\D 除所有数字外[^0-9]

\w 包含所有字符(大小写英文字母、下划线、数字) [a-zA-Z_0-9]

\W 除所有字符(大小写英文字母、下划线、数字)外 [^a-zA-Z_0-9]

\s 空白区域如回车、换行、分页等 [\f\n\r]

\S 非空白区域如回车、换行、分页等 [^\f\n\r]

元字符

. 匹配任意次但不包含回车换行

* 匹配任意次

? 匹配0次或1次

+ 匹配1次或多次

| 选择匹配(或者)

^ 匹配开头(方括号中表示非)

$ 匹配尾部

{m} 匹配前一个内容的重复次数为m次

{m,} 匹配前一个内容的重复次数大于等于m次

{m,n}匹配前一个内容的重复次数m次到n次

( ) 合并整体匹配,并放入内存,可使用\1 \2...依次获取

模式修正符: 【/正则/U 】

小写i:不区分大小写

小写m:匹配首内容或尾内容时采用多行识别匹配

小写s:将转义回车取消视为单行匹配

小写x:忽略正则中的空白

大写A:强制从头开始匹配

大写D:强制$匹配尾部无任何内容

大写U:禁止贪婪匹配,只跟踪到最近的一个匹配符并结束,常用在采集程序

小写u:匹配中文

Perl正则表达式函数:

preg_grep($mode,$str) //匹配查找,返回一个数组;

preg_match($mode,$str,$return) //在字符串中查找匹配项,返回一个数组。

preg_match_all($mode,$str,$return [,int flags])

preg_split($mode,$str [,int limit 切割多少次 [,int flags] ] ) //使用正则表达式分割字符串,并将结果以数组的形式返回(类似explode)。

preg_replace($mode,$replacement,$str [,int limit 匹配多少次]) //查找和替换子字符串(类似str_replace)

preg_quote($str) //在每个正则表达式的特殊字符前面加入一个转义字符(反斜线“\”),正则表达式的特殊字符包括:.\\+*?[^]$(){}=!<>|:

解题方法总结:

1.先写出一个要匹配的字符串

2.自左向右的顺序使用正则表达式的原子和元字符拼接

3.加入模式修正符

【常用正则表达式】

//删除一对中括号内的内容:

$str = 'abc[url]123[/url]xyz';

$pattern = '/\[url\S*\[\/url\S*\]/';

$str = preg_replace($pattern, '', $str);

echo $str . ''; //输出:abcxyz

//PHP匹配多对中括号中的内容:

$str = '这是[3]def[25]我的[26]';

$pattern = '/\[([a-z0-9]+)\]/';

preg_match($pattern, $str, $match);

print_r($match);

//匹配所有大括号里面的内容:

$str = 'abc{title}def{author}mn';

$pattern = '/{(.*)}/U';

preg_match($pattern, $str, $match);

print_r($match);

//匹配网页源代码中的图片路径:

$str = '<img alt="标题" id="pic" src="http://test.cn/avatar.jpg" />';

$pattern = '/<img.*?src="(.*?)".*?\/?>/i';

preg_match($pattern,$str,$match);

print_r($match);

//匹配当前页面的所有超链接:

$str = '<a href="http://www.test.com/a.html">跳转</a>';

$pattern = '/<a(.*?)href="(.*?)"(.*?)>(.*?)<\/a>/i';

preg_match($pattern, $str, $match);

print_r($match);

//匹配邮件

$str = '12345@qq.com';

$pattern = "/^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,})$/i";

preg_match($pattern, $str, $match);

print_r($match);

//匹配11位手机号:

$str = '13299803211';

$pattern = "/^1(3|5|8)\d{9}$/";

preg_match($pattern, $str, $match);

print_r($match);

//匹配139开头的11位手机号码

$str = '13912345678';

$pattern = '/^139\d{8}$/';

preg_match($pattern,$str,$match);

print_r($match);

//UTF-8编码下提取字符串中的中文:

$str = 'hello 中文 byebye';

$pattern = '/[\x{4e00}-\x{9fa5}]+/u';

preg_match($pattern, $str, $match);

print_r($match); //“中文”

//替换字符串中的中文为空

$res = preg_replace($pattern,'',$str);

echo $res.’';

//分割中文字符串为等长度元素的数组(英文可以用str_split,但中文会乱码)

$str = '中文字符串';

$res = preg_split('/(?<!^)(?!$)/u', $str);

print_r($res);

//过滤网页上的所有script标记

$str = '<script type="text/javascript" src="dd.js">alert(123);</script><p style="color: red">测试php正则匹配掉js代码</p>';

$pattern = "/<script[\s\S]*?<\/script>/i"; //过滤JS标签

$pattern = "/<[\/\!]*?[^<>]*?>/si"; //过滤HTML标签

$res = preg_replace($pattern, "", $str);

echo $res.’';

//替换<b>标签为空

$str = '<b>abc</b><b>abc</b>';

$pattern = '/<b>(.*?)<\/b>/';

$res = preg_replace($pattern,'\\1',$str);

echo $res.'';

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

人间四月天美丽春色

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值