正则表达式随笔

来源:互联网 发布:苹果实用软件推荐 编辑:程序博客网 时间:2024/06/06 08:42
每次都是想到需要正则的时候就百度下就好了,每次都这样,没有系统的归纳,一看就是好久,于是今天打算随便整理整理。正则是干嘛的,基本上不用多说了,校验格式的。1、 / 是定界符,一般起和终止都是/ 2、+ 规定是它前面的字符必须连续存在一次或多次:[1,~]3、* [0,~]4、? [0,1]其他的有\s :用来匹配空格和换行符还有tab键\S :用来匹配除了空格之外的所有字符\d :0-9的数字\D  [^0-9]表示非字符字符\w 匹配字母下划线数字\W 匹配非字符下划线数字.   点匹配除了回车和换行以外的所有字符,可以说很强大的

总结:小写和大小的是相反的。正则表达式可以:/内容/ 也可以^内容$

2、还有不少1、[a-z] 表示和a-z内的任何一个小写字母匹配2、[a|z]^ 开始

  () 域段
  [] 包含,默认是一个字符长度
  [^] 不包含,默认是一个字符长度
  {n,m} 匹配长度
  . 任何单个字符(. 字符点)
  | 或
  \ 转义
  $ 结尾
  [A-Z] 26个大写字母
  [a-z] 26个小写字母
  [0-9] 0至9数字
[A-Za-z0-9] 26个大写字母、26个小写字母和0至9数字
  , 分割

以上就是些概念了,主要说说惰性匹配和贪婪匹配

<?php$str = 'abcdefght43534a534t';$preg = '/a.*?t/';$preg1 = '/a.*t/';$result = preg_match_all($preg,$str,$match);$result1 = preg_match_all($preg1,$str,$match1);var_dump($match);var_dump($match1);
.*?    是惰性匹配,匹配到满足条件的abcdefght就停止了此次匹配,不会干扰后面的继续匹配所以第一个输出结果是
array(1) {  [0]=>  array(2) {    [0]=>    string(9) "abcdefght"    [1]=>    string(5) "a534t"  }}

.* 是贪婪匹配,他会尽可能多的占用字符串,所以结果是

array(1) {  [0]=>  array(1) {    [0]=>    string(19) "abcdefght43534a534t"  }}

4、非获取匹配
(?:pattern)
非获取匹配,匹配pattern但不获取匹配结果,不进行存储供以后使用。这在使用或字符“(|)”来组合一个模式的各个部分是很有用。例如“industr(?:y|ies)”就是一个比“industry|industries”更简略的表达式。
(?=pattern)
非获取匹配,正向肯定预查,在任何匹配pattern的字符串开始处匹配查找字符串,该匹配不需要获取供以后使用。例如,“Windows(?=95|98|NT|2000)”能匹配“Windows2000”中的“Windows”,但不能匹配“Windows3.1”中的“Windows”。预查不消耗字符,也就是说,在一个匹配发生后,在最后一次匹配之后立即开始下一次匹配的搜索,而不是从包含预查的字符之后开始。
(?!pattern)
非获取匹配,正向否定预查,在任何不匹配pattern的字符串开始处匹配查找字符串,该匹配不需要获取供以后使用。例如“Windows(?!95|98|NT|2000)”能匹配“Windows3.1”中的“Windows”,但不能匹配“Windows2000”中的“Windows”。

5、在匹配结束以后会带参数如:gimsex,各自的含义是:
1、/g 表示该表达式将用来在输入字符串中查找所有可能的匹配,返回的结果可以是多个。如果不加/g最多只会匹配一个
2、/i 表示匹配的时候不区分大小写,这个跟其它语言的正则用法相同
3、/m 表示多行匹配。什么是多行匹配呢?就是匹配换行符两端的潜在匹配。影响正则中的^$符号
4、/s 与/m相对,单行模式匹配。
5、/e 可执行模式,此为PHP专有参数,例如preg_replace函数。
6、/x 忽略空白模式。

1 0
原创粉丝点击