PHP正则

正则表达式实战指南

正则的作用,字符串的分割、查找、匹配、替换

定界符:两个斜线/

常用通用字符

  • \d    [0-9]十进制数字
  • \D   非[0-9]十进制数字
  • \s    任一空白字符 回车制表换行换页都算
  • \S   非空白字符
  • \w  [0-0a-zA-Z_]数字大小字母下划线
  • \W  非[0-0a-zA-Z_]

元字符

  1.    .  匹配换行符以外的任意一个字符
  2.    * 匹配0次 1次或者多次
  3.    + 匹配1次或者多次
  4.    ? 匹配0次或者1次
  5.     ^ 匹配字符串开头位置
  6.     $ 匹配字符串结束位置
  7.      | 或者的意思,分支选择
  8.      [] 匹配其中的任意一个原子
  9.     {10} 前面原子出现10次
  10.    {10,}前面原子至少出现10次
  11.   {10,20}前面原子出现10到20次之间
  12.   [^]     匹配非其中的任意一个原子
  13. ()  匹配其整体为一个整体,反向引用$n 或者\1

常用修正符

  • i    不区分大小写
  • U   取消贪婪模式
  • x   忽略空白

常用函数

  • preg_replace
  • preg_match
  • preg_match_all
  • preg_split

demo

//匹配135开头的手机号码
$pattern_1 = '/^135\d{9}$/';
var_dump(preg_match($pattern_1,'1361111'));//0
var_dump(preg_match($pattern_1,'13512345678'));//1
var_dump(preg_match($pattern_1,'1351234567a'));//0

复制代码

//判断url
$subject = "网址为https://www.baidu.com/index.php的位置是百度首页";
$pattern_2 = '/(http[s]?):\/\/(.*?)\.(com|cn|net|org)\/(\w*\.[a-zA-Z]*)/';
var_dump(preg_match($pattern_2,$subject,$url_res)); //1
var_dump($url_res);复制代码

//查找图片标签中src的url
$img = '<img src="haha.jpg" alt="什么东西"><img src="haha2.jpg" alt="什么东西"/>aadfsadfsdf<img src="haha3.jpg" alt="什么东西">dsfsdfsdf<img src="haha4.jpg" alt="什么东西"/>';
$img_pattern = '/<img.*?src="(.*?)".*?>/';
var_dump(preg_match($img_pattern,$img,$img_res));
var_dump($img_res);
//也可以使用preg_replace_all 替换src
var_dump(preg_replace_all($img_pattern,'replace',$img));复制代码

//可以匹配所有HTML标记的开始和结束的正则表达式
$pattern = "/<[\/\!]*?[a-z]*[^<>]*?>/is"; //声明一个带有多个HTML标记的文本
$text = "这个文本中有<b>粗体</b>和<u>带有下画线</u>以及<i>斜体</i> 还有<font color='red' size='7'>带有颜色和字体大小</font>的标记"; //将所有HTML标记替换为空,即删除所有HTML标记
var_dump(preg_replace($pattern, "", $text));
 //通过第四个参数传入数字2,替换前两个HTML标记
var_dump(preg_replace($pattern, "", $text, 2));复制代码

//查找文本中图片标签的src
$img = '<img src="haha.jpg" alt="什么东西"><img src="haha2.jpg" alt="什么东西"/>aadfsadfsdf<img src="haha3.jpg" alt="什么东西">dsfsdfsdf<img src="haha4.jpg" alt="什么东西"/>';
$img_pattern = '/<img.*?src="(.*?)".*?>/';
var_dump(preg_match_all($img_pattern,$img,$img_res));
var_dump($img_res);
var_dump($img);复制代码

//使用逗号或空格(包含" ", \r, \t, \n, \f)分隔短语
$keywords = preg_split("/[\s,]+/", "hypertext language, programming");
print_r($keywords);
复制代码


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值