【php】正则表达式

一、生活当中的正则表达式:

  a)Notepad++、word等这些具有编辑功能的软件,都具有一个查找、替换的功能,这个功能,其实就属于正则模式的一种匹配、替换;包括windows当中可以实现的查找,也是应用的正则模式匹配;包括一些搜索、匹配的软件也是使用的正则模式规则来写的!

二、PHP当中的正则:

  a)定义:它是用于对使用一种模式,对一段字符串进行的查找、替换、匹配、分割的作用

  三、正则模式:

  a)其实就是一段特殊的字符串!我们可以使用这一段特殊的字符串对另一段字符串进行的一系列操作!

  b)模式:

    i.单身模式:找女朋友,学习,充实自己!

    ii. 恋爱模式:此刻仉浩焱和他的女朋友在热恋期,此时他们的智商都为0

    iii.婚姻模式:此刻仉浩焱和他的女朋友结婚啦,从此过上了幸福的生活!

    iv.侦查模式:此时他媳妇的智商仅次于爱因斯坦,她会从仉浩焱的蛛丝马迹发现海波是不是偷腥了~~(头发丝儿、身上是否有香水味、是否有口红…)

四、正则的分类:

  a)POSIX规则:

    i.已弃用,(功能、使用频率)比较落后,因此弃用

  b)PCRE规则:

    i.正在使用!

五、如何来使用正则表达式?

  a)正则的定界符:

  b)原子:

  c)元字符:

  d)模式修正符:

  e)配合正则函数来进行使用!

    i.Preg_match()          匹配一次

    ii.Preg_match_all()      匹配所有

六、定界符:

  a)和定义字符串一样,我们定义正则也需要使用正则的定界符

  b)“/正则模式/” ,正则当中的定界符可以是除了字母、数字、具有特殊含义符号之外的所有内容,都可以作为定界符

  c)注意:通常情况下,我们都会使用双斜线作为正则模式的定界符,这是一个不成文的规定!

七、 原子:是正则模式当中最小的单位!
  a) 普通字符:
    1. a-z:之中的所有小写字母,都是一个原子
    2. A-Z:之中的所有大写字母,都是一个原子
    3. 0-9:之间的所有阿拉伯数字,都属于一个原子
  b) 原子表:
    1. []:一个方括号当中所有的内容之间的关系都是或的关系,而且一个原子表永远代表一个原子!
    2. [abcdfg]:可以写单个原子
    3. [a-z]:任一一个小写字母
    4. [A-Z]:任一一个大写字母
    5. [0-9]:任一一个阿拉伯数字
    6. [a-g]:任一一个从a-g之间的小写字母
    7. 原子表中如果有一个 ‘-’代表了一个范围!
  c) 特殊的转义字符:
    1. \d:相当于[0-9],代表了任意一个阿拉伯数字
    2. \D:代表了任一一个除了阿拉伯数字的内容
    3. \w:代表了任意一个字母、数字、下划线的内容
    4. \W:代表了除了任意的字母、数字、下划线的内容
  d) 非打印字符:
    1. \r:回车
    2. \n:换行
    3. \t:制表符
  e) 正则当中拥有特殊含义的字符:
    1. *、.、+、?、\,当我们想要使用正则模式去匹配这些具有特殊含义的字符时,我们需要在它前方加上转义字符 \
八、 元字符:在正则表达式当中,那些拥有特殊含义的字符,就是元字符
  a) []:原子表,特点:原子表中的原子之间的关系是或,一个原子表代表一个原子
  b) {n}:匹配次数:花括号之前的原子必须出现n次
  c) {n,}:匹配次数:花括号之前的原子至少出现n次,没有上限
  d) {n,m}:匹配次数:花括号之前的原子至少出现n次,最多出现m次
  e) .:代表任意一个原子
  f) *:匹配次数:代表*号之前的原子是任意长度,相当于{0,}
  g) +:匹配次数:代表+号之前的原子是至少一次,没有上限,相当于{1,}
  h) ?:匹配次数:代表?号之前的原子可有可无,相当于{0,1}
  i) ^:两层含义
    i. 如果将其放在正则模式左定界符后,则代表以^之后的原子开头
    ii. 如果将其放在原子表中最开头,[^0-9],则代表原子表中的内容取反
  j) $:如果将其放在正则模式右定界符前,则代表以$符之前的原子结尾
    i. 注意:如果配合使用上箭头^和美元符号$,则代表精确匹配,代表我们匹配的字符源必须符合他们中间的正则模式的内容!
  k) ():三层含义:
    i. 提升优先级
    ii. 子存储
    iii. 重复使用模式单元
  l) |:或者

九、 关于正则模式的特殊运用:
  a) 贪婪匹配

 1 // 定义字符源
 2 $stu = ‘#仉浩焱##许超##张舒##大嘴##小花##伟哥#‘;
 3
 4 // 定义正则模式(这属于贪婪匹配)
 5 $patt = "/#.*#/";
 6 var_dump($res);
 7
 8 //结果
 9 array (size=1)
10   0 =>
11     array (size=1)
12       0 => string ‘#仉浩焱##许超##张舒##大嘴##小花##伟哥#‘ (length=51)
13
14 // 定义正则模式(拒绝贪婪匹配)
15 $patt = "/#.*?#/";
16
17 // 使用正则函数来进行匹配
18 preg_match_all($patt,$stu,$res);
19 var_dump($res);
20
21 //结果
22 array (size=1)
23   0 =>
24     array (size=6)
25       0 => string ‘#仉浩焱#‘ (length=11)
26       1 => string ‘#许超#‘ (length=8)
27       2 => string ‘#张舒#‘ (length=8)
28       3 => string ‘#大嘴#‘ (length=8)
29       4 => string ‘#小花#‘ (length=8)
30       5 => string ‘#伟哥#‘ (length=8)

  b) 子存储
  c) 重复使用模式单元
十、 正则当中的函数:
  a) Preg_match()、 执行一个正则表达式匹配

 1 //定义字符源
 2 $str = "abcdefgabcdefg";
 3
 4 //定义正则模式
 5 $patt = "/a/";
 6
 7 echo preg_match($patt,$str,$res);
 8 var_dump($res);
 9 //array (size=1)
10 //0 => string ‘a‘ (length=1)                

  b) Preg_match_all()、 执行一个全局正则表达式匹配

 1 //定义字符源
 2 $str = "abcdefgabcdefg";
 3
 4 //定义正则模式
 5 $patt = "/a/";
 6
 7 //匹配所有
 8 preg_match_all($patt,$str,$res);
 9 var_dump($res);
10
11 //array (size=1)
12     0 =>
13       array (size=2)
14       0 => string ‘a‘ (length=1)
15       1 => string ‘a‘ (length=1)

  c) Preg_grep(); 返回匹配模式的数组条目
  d) Preg_replace(); 执行一个正则表达式的搜索和替换
  e) Preg_split(); 通过一个正则表达式分隔字符串
十一、 正则当中的模式修正符:
  a) i:不区分大小写

 1 //模式修正符i:表示正则匹配不区分大小写
 2 $str = "abcdefgABCDEFG";
 3 $patt = "/[a-z]/i";
 4 preg_match_all($patt,$str,$res);
 5 var_dump($res);
 6
 7 //结果
 8 array (size=1)
 9   0 =>
10     array (size=14)
11       0 => string ‘a‘ (length=1)
12       1 => string ‘b‘ (length=1)
13       2 => string ‘c‘ (length=1)
14       3 => string ‘d‘ (length=1)
15       4 => string ‘e‘ (length=1)
16       5 => string ‘f‘ (length=1)
17       6 => string ‘g‘ (length=1)
18       7 => string ‘A‘ (length=1)
19       8 => string ‘B‘ (length=1)
20       9 => string ‘C‘ (length=1)
21       10 => string ‘D‘ (length=1)
22       11 => string ‘E‘ (length=1)
23       12 => string ‘F‘ (length=1)
24       13 => string ‘G‘ (length=1)

  b) s:表示忽略换行符

//模式修正符s:表示正则匹配忽略换行符
$str = "
        <li>张三</li>
        <li>李四
        </li>
        <li>王五</li>
        ";

//不加模式修正符s
$patt = "/<li>.*?<\/li>/";
preg_match_all($patt,$str,$res);
var_dump($res);

//结果
array (size=1)
  0 =>
    array (size=2)
      0 => string ‘<li>张三</li>‘ (length=15)
      1 => string ‘<li>王五</li>‘ (length=15)

//加模式修正符s
$patt = "/<li>.*?<\/li>/s";
preg_match_all($patt,$str,$res);
var_dump($res);

//结果
array (size=1)
  0 =>
    array (size=3)
      0 => string ‘<li>张三</li>‘ (length=15)
      1 => string ‘<li>李四
            </li>‘ (length=20)
      2 => string ‘<li>王五</li>‘ (length=15)

  c) U:表示拒绝贪婪匹配

 1 //模式修正符U:表示正则拒绝贪婪匹配
 2 $str = "#海波##鸿泽##柏岩##景飞#";
 3 $patt = "/#.*#/U";
 4 preg_match_all($patt,$str,$res);
 5 var_dump($res);
 6
 7 //结果
 8 array (size=1)
 9   0 =>
10     array (size=4)
11       0 => string ‘#海波#‘ (length=8)
12       1 => string ‘#鸿泽#‘ (length=8)
13       2 => string ‘#柏岩#‘ (length=8)
14       3 => string ‘#景飞#‘ (length=8)

十二、 关于正则和字符串函数:
  a) 正则函数就相当于大炮:
  b) 字符串函数就相当于弓箭:

时间: 2024-11-13 07:59:29

【php】正则表达式的相关文章

【Linux系列】【基础版】第四章 Shell基础之正则表达式

4. Shell基础之正则表达式     4.1 正则就是一串有规律的字符串         4.1 grep              4.1.1 格式: grep [-cinrvABC] 'word' filename             4.1.2 -c //count,表示行数             4.1.3 -i //不区分大小写             4.1.4 -n  //显示行号             4.1.5 -r  //遍历所有子目录             4

正则表达式中的逆向思维

人们的正常思维都是顺向的,那么逆向思维呢,特别是初学正则表达式的同学们,好不容易掌握了正则表达式的用法,再突然要你用逆向思维做题,会有很多不适应: 这里拿三道题,来做简单介绍: 1.经典例题取IP: [[email protected] ~]# ifconfig eth0|sed -nr '2s#^[^0-9]+(.*)[a-Z]{5,}.*#\1#gp' 10.0.0.200 2.调换/etc/passwd中最后一列和第一列的位置: [[email protected] ~]# head /p

JAVA正则表达式:Pattern类与Matcher类详解(转)

java.util.regex是一个用正则表达式所订制的模式来对字符串进行匹配工作的类库包.它包括两个类:Pattern和Matcher Pattern 一个Pattern是一个正则表达式经编译后的表现模式. Matcher 一个Matcher对象是一个状态机器,它依据Pattern对象做为匹配模式对字符串展开匹配检查. 首先一个Pattern实例订制了一个所用语法与PERL的类似的正则表达式经编译后的模式,然后一个Matcher实例在这个给定的Pattern实例的模式控制下进行字符串的匹配工作

前端学PHP之正则表达式函数

前面的话 正则表达式不能独立使用,它只是一种用来定义字符串的规则模式,必须在相应的正则表达式函数中应用,才能实现对字符串的匹配.查找.替换及分割等操作.前面介绍了正则表达式的基础语法,本文将详细介绍正则表达式函数 匹配与查找 [preg_match()] preg_match()函数用来执行一个正则表达式匹配,搜索subject与pattern给定的正则表达式的一个匹配.返回pattern的匹配次数.它的值将是0次(不匹配)或1次,因为preg_match()在第一次匹配后将会停止搜索.preg

正则表达式

grep命令和正则表达式 一. 正则 : 正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符.及这些特定字符的组合,组成一个"规则字符串",这个"规则字符串"用来表达对字符串的一种过滤逻辑.给定一个正则表达式和另一个字符串,我们可以达到如下的目的:1. 给定的字符串是否符合正则表达式的过滤逻辑(称作"匹配"):2. 可以通过正则表达式,从字符串中获取我们想要的特定部分. 正则表达式和通配符一样,也是一组特殊符号,通配符是由sh

java中的正则表达式

正则表达式 : 正则表达式(regular expression)描述了一种字符串匹配的模式(pattern),可以用来检查一个串是否含有某种子串.将匹配的子串替换或者从某个串中取出符合某个条件的子串等. 一些字符所代表的意思: \        将下一字符标记为特殊字符.文本.反向引用或八进制转义符^       匹配输入字符串开始的位置$       匹配输入字符串结尾的位置.        匹配任何单个字符\s      空白(空格符.换行符.回车符.制表符)\S     非空白[]  

Python 正则表达式相关问题

这几天学习python,写正则表达式相关代码如下: import re print(re.search(r'(?<=<(\w+)>).*(?=<\/\1>)',"<b>ewuiiriur</b>sdksfkj").span()) 报错如下: raise error("look-behind requires fixed-width pattern")sre_constants.error: look-behind

7.python之正则表达式re模块

一.re模块的常用方法: re.findall() 用于返回一个字符串中,所有能被正则表达式所匹配到的字符串,以列表的方式返回. 用法re.findall(正则表达式,字符串). s1 = "sadjhjafdsajkhjsdaysadsadduayu" 比如说,想要从上面这一长串字符串中,匹配出a后面有一个任一字符在紧接着一个字母u的字符串. print re.findall('a.u',s1) >>>['ayu'] re.finditer()作用和findall一

JS中有关正则表达式的一些常见应用

总所周知,正则表达式主要用于字符串处理.表单验证等,简单的代码量实现复杂的功能 1.身份证号码的一个校验 先做一个简单的位数校验来判断身份证的合法性:(15位数字或18位数字或17位数字加X|x) var reg=/(^\d{15}$)|(^\d{18}$)|(^\d{17}(^\d|X|x)$)/ if(reg.test(num) === false){ alert("你输入的身份证不合法"); return false; } 18位=前六位地区+中八位出生日期+后4位顺序号(最后一

4-4 grep及正则表达式

1. grep:Globally search a Regular Expression and Print:根据模式搜索文本,并将符合模式的文本行显示出来 pattern:文本字符和正则表达式的元字符 一般查询 其中 -i:忽略大小写 --color: 另外,删掉alias,是以如下格式 -v:显示没有被模式匹配的行 -o:只显示被模式匹配到的字符串 2. 正则表达式:regular expression,简称REGXP 3. 位置锚空 ^: 锚空行道,此字符后的任意内容必须出现在行首 $: