轻松推到正则表达式(四)

需求

从  @aleen 你好aleen  @axco 你好axco @lucifer 你好lucifer 中
取出 用户名及消息 并以  name - message 的形式显示
名字 - 信息
aleen -你好aleen
axco -你好axco
lucifer -你好lucifer

规则 @多个字符空格 多个字符
对应 @\w+ \s \w+
所以对应的 正则可以写成 /@\w+\s\w+/
又因为我们要取到名字 和信息 所以可以这样写/@(\w+)\s(\w+)/,因为页面是utf-8 的所以 后面要加上一个u

php 代码
  $str = "@aleen 你好aleen  @axco 你好axco @lucifer 你好lucifer";
  $mach = "/@(\w+)\s(\w+)/u";
  preg_match_all($mach,$str,$res);
  var_dump($res);

得到结果 
  array(3) { [0]=> array(3) { [0]=> string(18) "@aleen 你好aleen" [1]=> string(16) "@axco 你好axco" [2]=> string(22) "@lucifer 你好lucifer" } [1]=> array(3) { [0]=> string(5) "aleen" [1]=> string(4) "axco" [2]=> string(7) "lucifer" } [2]=> array(3) { [0]=> string(11) "你好aleen" [1]=> string(10) "你好axco" [2]=> string(13) "你好lucifer" } }

已经分别取到了对应的值,但是显示结果很难看
这个时候使用?<> 这个奇怪的符号 个人理解为 ? 会返回一个xx 的数组 ,直接试一下
将上面$mach 替换为 $mach = "/@(?\w+\s)(?\w+)/u";
刷新界面得到

轻松推到正则表达式(四)_第1张图片
得到的结果

两个数组
然后做一下输出即可

 for($i = 0 ;$i ";
    }

即可显示出目标结果
js 部分

  var str = "@aleen 你好aleen  @axco 你好axco @lucifer 你好lucifer";
    var pattern = /[@](\w+\s)(.[^@]+)/g;
    while (res = pattern.exec(str)){
        console.log(res[1]+" - "+res[2])
    }

利用[] 与^ ,之前讲过 ^ 表示在行最开始处,这里 [ ^@] (前面没有空格这里被转译了我也不知道为啥)表示除@字符外的所有字符都可以匹配 ,同理

  • [A-Z] 表示从A到Z 的字符
  • [a-z]表示从a到z 的字符
  • [1-5]表示从1到5的数字

需求 从

$str  = "![](a.jpg)![](abc.png)![](aeeed.jnp)";

中取得所有图片的路径
$mach = "/\w+.[jpg|png])'\/>/u";
这样写貌似也可以但是他错误的取到了aeeed.jnp
这个时候需要使用()
$mach = "/\w+.(jpg|png))'\/>/u";
即可

你可能感兴趣的:(轻松推到正则表达式(四))