wxmg
论坛版主
论坛版主
  • UID5
  • 粉丝2
  • 关注0
  • 发帖数19
  • 社区居民
阅读:2080回复:1

正则学习6-8课时笔记(php篇)

楼主#
更多 发布于:2015-12-14 14:26
/******************Lesson6******************/
echo "<h1>Lesson6</h1>";
echo "<hr>";
/*
**  1. 中括号[]代表范围,[A-E]等价于[ABCDE]
**  2. 加上一个^代表 ”非“ ,[^A-E]代表除了A-E范围内的大写字母
**  3. \W 正好和\w相反。代表非\w的一个字符 
*/
//取微博的消息 @xxx aaa@xxx bbb 
//1、消息体之前 一定会有 @XXX 这种形式出现
//2、如果消息体 后面又出现@,那么代表一个新的微博@ 开始了。
 
$str="@xinsuonline 你好@hhh 你好2";
$pattern="/@(?<username>\w+\s)(?<msg>[\w\W][^@]+)/u"; //[\w\W][^@]除了@之外的字符
preg_match_all($pattern,$str,$result);
foreach($result["username"] as $key=>$value){
    echo "用户名:",$value,",消息:",$result["msg"][$key],"</br>";
}
 
 
 
/******************Lesson7**********************/
echo "<h1>Lesson7</h1>";
echo "<hr>";
/*
**  1. 大括号{},如 \w{3}代表只取三位,\w{1,}代表 >=1位, \w{3,10}  代表匹配数字或下划线或字母,同时最小三位 最大10位
**  2. [|] |代表或
*/
 
//题目:1、假设图片的文件名只可能是小写字母,且最长不超过5位,最短是一位
//      2、根据上述字符串:取出图片的src集合
//      <img src=‘abc.jpg’/><img src=‘abcde.png’/>
 
$str="<img src='abc.jpg'/><img src='abcde.png'/><img src='dede.jpgn'/><img src='ddd.pjn'/><img src=dde.jpg/>";
$pattern="/<img\ssrc='(?<imgstr>[a-z]{1,5}\.[jpgpng]{3})'\/>/u";
//pjn也匹配出来了,但不是我们想要的,最后一个img的src书写不规范,没匹配出来
 
preg_match_all($pattern,$str,$result);
foreach($result["imgstr"] as $value)
{
    echo $value."</br>";
}
 
 
/*********************Lesson8*****************/
echo "<h1>Lesson8</h1>";
echo "<hr>";
/*
**  1. 在小括号内连续字符可以作为多选进行匹配,这里的连续 我们可以认为“顺序是一样一样的” ,如(png|jpg),必须是png或者jpg才行
 
    2、(?:XXXX) ,代表这个小括号里面的匹配并不分组,白话说:就是不取出来 如:(?:')匹配单引号,但是不分组
 
    3、配合一下三个符号:(死记)
 
    XXX? : 代表0个或1个 XXX      如:(?:')?    代表 ' 是可有可无的;(?:\w)?呢? 代表 字母、数字、下划线可有可无
    XXX+:  代表1个或多个XXX   如:\w+   代表1个或者多个 字母、数字、下划线
    XXX* : 代表0个多个XXX        如:\s*   代表0个多个空格
         
 
*/
 
$str="<img src='abc.jpg'/><img src='abcde.png'/><img src='dede.jpgn'/><img src='ddd.pjn'/><img src=dde.jpg/>";
//用嵌套的小括号过滤掉jpgn,pjn顺序和个数不一样的后缀
$pattern="/<img\ssrc='(?<imgstr>[a-z]{1,5}\.(jpg|png))'\/>/u";
 
//用(?:')? 代表了单引号 ' 可有可无
$pattern="/<img\ssrc=(?:')?(?<imgstr>[a-z]{1,5}\.(jpg|png))(?:')?\/>/u";
 
//我们再完善一下,因为img后面可能加了N个空格,或者 />前面加了N个空格,比如<img          src=''    />,或者用双引号的src=""
$str="<img   src=\"abc.jpg\"/><img src='abcde.png'    /><img src='dede.jpgn'/><img src='ddd.pjn'/><img src=dde.jpg/>";
$pattern="/<img\s{1,}src=(?:')?(?:\")?(?<imgstr>[a-z]{1,5}\.(jpg|png))(?:')?(?:\")?\s{0,}\/>/u";
 
//学习到了第三个知识点,?+ * 还可以这么写:
$pattern="/<img\s+src=(?:['|\"])?(?<imgstr>[a-z]{1,5}\.(jpg|png))(?:['|\"])?\s*\/>/u";
 
preg_match_all($pattern,$str,$result);
foreach($result["imgstr"] as $value)
{
    echo $value."</br>";
}
v2ex_com
校友
校友
  • UID186
  • 粉丝1
  • 关注7
  • 发帖数47
  • 社区居民
  • 忠实会员
沙发#
发布于:2016-01-05 00:07
楼主,你的头像好可怕,能换个看起来不可怕的吗
游客

返回顶部