码迷,mamicode.com
首页 > 其他好文 > 详细

正则表达式

时间:2016-02-22 17:04:24      阅读:139      评论:0      收藏:0      [点我收藏+]

标签:

  1. 在正则表达式中,*的前面一定要有内容,比如.(代表比配任何字符,除了换行符),看苗泽的Nginx的实例中发现了一个问题:匹配png以及html的表达式她成了*\.(png|htm...),但是其实最前面应该添加一个小"."的,这才代表匹配前面任意项;注意"."尤其正则含义,这个表达式如果把"."前面的"\"去掉,那么就成了匹配任意字符,比如three.png没有问题,那么threeApng也是可以匹配的所以需要使用转义为字符"."才符合本意;
  2. 另外,要注意,正则表达式匹配的是一段文字的一部分,正则判断是否有字符串段是否和正则;比如1/three.png,如果正则为[/a-z].*\.png,那么就匹配是three.png;反正只有匹配就OK,但是如果使用了"^","$"进行前后缀修饰的话,那么就意味着一定要匹配的是字符串的最开头/最结尾要满足某个模式;
  3. 括号有俩个作用:首先是包裹器,比如(png|htm|html),这代表()或指令的范围只是括号范围内的;另外一个是表明是一个独立参数部分,比如在nginx中可以通过$1取得第一个()范围内字符串;举个例子location ~ ^/(.*\.png)$,下面的alias可以是d:/MyRealm/Nginx/website/img/$1$1部分就是匹配(.*\.png)部分内容;
  4. 怎样匹配URI最后一个"/"之后的资源内容呢(资源是png文件)?第一种思路:把最后一个斜线之前的内容都去掉,通过在前面添加限定符,还有一种思路,对于"/"之后的内容模式进行设定,让他独一无二;前者思路正向正则思路,匹配思路,比如我们想要匹配电话号码;但是后一种思路其实是为了取$1用的,这类问题就要从设定$1部分特定模式上面下手,后来实现超简单:[a-z]*\.png$,因为让".png"前面只出现字母,就是URI最后的资源部分内容;搞掂;
  5. 其实Nginx的缓存功能并不重要,因为只有Nginx作为Web服务器的时候才会在内存进行缓存,但是Nginx作为缓存服务器的机会并不大;
  6. 要注意正则只是匹配其中一部分;密码密码,字母或者数字,6位或者8位,\w{6,8},那么对于一个七位的字符串也是匹配的,因为前六位已经和该表达式匹配;延伸一下,如果你想要验证一下长度,可以通过指定首尾位置来约束重复的次数:^.{7}$(长度为7);

?

正则表达式有两个用途,一个用途就是判断一个字符串是否匹配某种模式;匹配从几方面下手:

  1. 首先考虑位置,是否需要限定字符串的收尾(^$)
  2. 其次考虑占位,占位有两种方式,一种是明确的占位,比如匹配/svr/loc/*.html,那么就需要/svr/loc就是明确字符占位,*就是模糊占位(除了*之外还有"."占位)
  3. 再者考虑模式是否有重复,比如电话号码是11位,[0-9]{8};密码,字母或者数字,6位或者8位,\w{6,8}以及重复限制,比如长度;

另外一个用途,就是可以通过()索引字符串匹配某个规则的部分,取出来以作他用;比如取出资源部分(*.htm)作为参数传递个跳转的url;

正则表达式

标签:

原文地址:http://www.cnblogs.com/xiashiwendao/p/5207477.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!