正则表达式基本语法入门

[TOC]

正则表达式基本语法入门

1 界定符

表示一个正则表达式的开始和结束

1
/[0-9]/ 或者 #[0-9]# 或者 {[0-9]}(PHP中不推荐)

$pattern = ‘/[0-9]/‘;

2 原子

正则表达式工具

regexpal是使用HTML+js开发的

http://tool.local/regexpal/

原子:正则表达式中最小的匹配单位。通常它只是Unicode编码表中的某一个字符。什么是Unicode编码表?

2-1 可见原子 - Unicode编码表中用键盘输出后肉眼可见的字符

有哪些?

  • 标点 ; “ _ ? .等
  • 英文字母数字 a-z,A-Z,0-9
  • 汉字、日文、阿拉伯文等其他语言文字
  • 数理化公式符号
  • 其他可见字符

2-2 不可见原子 - Unicode编码表中用键盘输出后肉眼不可见的字符

有哪些?

  • 换行符 \n
  • 回车 \r
  • 制表符 \t
  • 空格
  • 其他不可见字符

2-3 可见原子示例:

D 匹配D

d 匹配d

数理化公式符号

* 匹配五角星

文字匹配【关键】:

  • 汉字转化为Unicode编码后,再写到正则表达式中。可使用转换工具把汉字转化为Unicode编码。比如站长工具。

标点符号【关键】:

  • 当该符号($、括号、*、+、\斜杠本身【使用两个\匹配\】)是正则表达式运算符的时候,在其前面加上一个\,进行转义。

2-4 不可见原子示例

空格 制表符 回车

  • 直接敲一个空格

  • \t

  • \n【下一行的首字母】

  • \n\t 换行符后面跟一个制表符

2-5 元字符

定义原子的筛选方式

  • | 匹配两个或者多个分支选择;【或者的意思】
  • [] 匹配方括号中的任意一个原子;【括号里面写上原子或者是原子的集合】
  • [^] 匹配除方括号中的原子之外的任意字符;

示例:

Duang|duang 匹配Duang或者duang

[Dd]uang~ 与上面的效果一样

[789] 匹配7或者8或者9

[^789] 匹配除了789之外的任意一个字符 与上面互逆的

[78^9] 匹配7或者^或者8或者9

[a-z] 匹配26个小写字母

[a-k]

[a-g]

[A-H]

[0-9]

[0-5]

[0-3]

[a-zA-Z0-9]

[^a-zA-Z0-9] 匹配除了三类原子之外的

2.5.1 原子的集合

  • . 匹配除了换行符之外的任意字符,即[^\n]
  • \d 匹配任意一个十进制数字,即[0-9]
  • \D 匹配任意一个非十进制数字,即 [^ 0-9]
  • \s 匹配一个不可见原子,即[\f\n\r\t\v]
  • \S 匹配一个可见原子,即[^\f\n\r\t\v]
  • \w 匹配任意一个数字、字母或下划线,即[0-9a-zA-Z_]
  • \W 匹配任意一个非数字、字母或下划线,即[^0-9a-zA-Z_]

3 量词

定义:在目标字符串中查找某一个原子连续出现的次数

{n} 表示其前面的原子恰好出现n次 范围:n-无穷大次

{n,} 表示其前面的原子最少出现n次

{n,m} 表示其前面的原子最少出现n次,最多出现m次

星号 匹配0次、1次或者多次其之前的原子,即{0,}最少出现0次

加号 匹配1次或者多次其之前的原子,即{1,} 最少出现1次

? 匹配0次或者1次其之前的原子,即{0,1} 至少0次,最多1次

555 === [5]{3}

55 == [5]{2}

[a-zA-Z]{2} 匹配两个连续的字母不论大小写,比如 Du

[a-zA-Z]{4} 匹配4个连续的字母不论大小写,比如 Duan

\w{4} 连续4次的字母或者数字或者下划线

\w{4,} 最少匹配4次的,连续4次的字母或者数字或者下划线

\w{4,8} 匹配4次到8次

\w* 匹配任意次数

\d+ 匹配1次到无穷大次的数字

\d? 匹配0次或者1次的数字

_?i 匹配 i 或者 _i

在目标字符

4 边界控制

^ 匹配字符串开始的位置

$ 匹配字符串结束的位置

5 模式单元

() 匹配其中的整体为一个原子【括号内写上一个正则表达式】

^Duang~ 在Duang~前面不能有任何东西的,必须以大写字母D开头。

^Duang$ 在Duang前面不能有任何东西的,在后面不能有任何东西的,必须以大写字母D开头,必须以结束。

Duang|duang

[Dd]uang~

(D|d)uang~ 【把括号里面正则表达式匹配的结果当做是一个原子来看待,再连接后面的原子】

修正模式:懒惰匹配与贪婪匹配

1 修正模式

定义:给正则表达式匹配过程指定一种匹配模式。

由于正则表达式匹配的目标字符串情况复杂多样,有些时候同一个正则表达式在匹配同一个目标字符串时候存在匹配出两种甚至是多种不同结果的可能,而这就让匹配产生了歧义。修正模式就是为了解决这个问题而存在的。

1-1 贪婪匹配

  • 匹配结果存在歧义取其长【取其长】

1-2 懒惰匹配 ‘/…/U’

  • 匹配结果存在歧义取其短【取其短】

1-3 常见修正模式

  • U 懒惰匹配
  • i 让正则表达式 忽略英文字母大小写
  • x 让正则表达式 忽略空白包括空格 用Tab键食输出的制表符
  • s 让元字符 ‘.’匹配包括换行符在内所有字符
  • e 后面再详细讲解

示例:

1
2
3
4
5
6
$pattern = '/imooc.+123/';//贪婪匹配
$pattern = '/imooc.+123/U';//懒惰匹配
$pattern = '/iMooc.+123/i';//忽略大小写
// 两种模式同时工作的方式
$pattern = '/imoOc.+123/Ui';//贪婪模式 忽略大小写
$pattern = '/i mo Oc.+123/Uix'; === '/imooc.+123/Uix'

实战应用

  • 常见正则表达式书写
    • 非空、手机号、Email地址。。。
    • 正则工具类开发及表单验证案例
    • 仿smarty简易模板引擎

1 匹配非空

/.+/ 匹配到非空【表单中为必填项】

保留2位小数的浮点数:\d+.\d{2}$ 【货币值】

中国大陆的手机号:十一位的数字 \d{11}

1\d{10}

1(3|4|5|7|8)\d{9} 即使 1[34578]{1}\d{9}

Email地址:@前面可能是字母、数字、下划线 ,@后面也是一样的。

^\w+(\.\w+)*@\w+\.

mu.dada.c@ed.com

文章目录
  1. 1. 正则表达式基本语法入门
    1. 1.1. 1 界定符
    2. 1.2. 2 原子
    3. 1.3. 原子:正则表达式中最小的匹配单位。通常它只是Unicode编码表中的某一个字符。什么是Unicode编码表?
      1. 1.3.1. 2-1 可见原子 - Unicode编码表中用键盘输出后肉眼可见的字符
      2. 1.3.2. 2-2 不可见原子 - Unicode编码表中用键盘输出后肉眼不可见的字符
      3. 1.3.3. 2-3 可见原子示例:
      4. 1.3.4. 2-4 不可见原子示例
      5. 1.3.5. 2-5 元字符
        1. 1.3.5.1. 2.5.1 原子的集合
    4. 1.4. 3 量词
    5. 1.5. 4 边界控制
    6. 1.6. 5 模式单元
  2. 2. 修正模式:懒惰匹配与贪婪匹配
    1. 2.1. 1 修正模式
    2. 2.2. 1-1 贪婪匹配
    3. 2.3. 1-2 懒惰匹配 ‘/…/U’
    4. 2.4. 1-3 常见修正模式
  3. 3. 实战应用
    1. 3.1. 1 匹配非空
本站总访问量 | 本页面被访问 | 您是第位小伙伴

© XueSi博客 版权所有 备案号 : 赣ICP备19008485号-1