TBYBlog

vuePress-theme-reco TBYBlog    2020 - 2021
TBYBlog TBYBlog

Choose mode

  • dark
  • auto
  • light
时间轴
github
author-avatar

TBYBlog

23

Article

16

Tag

时间轴
github

正则表达式一篇就够了

vuePress-theme-reco TBYBlog    2020 - 2021

正则表达式一篇就够了

TBYBlog 2021-05-06 正则

# 正则表达式

正则表达式是一种文本模式,包括普通字符(1-9、a-Z)和元字符(特殊字符)。正则表达式可以使用单个字符串来描述、匹配某个句法规则的字符串。

# 正则表达式的功能

# 效验数据有效性

  • 检验手机号码
  • 检验邮箱
  • 检验身份证号码

# 查找符合要求的文本功能

  • 查找符合某规则的号码

# 对文本进行切割,替换等操作

  • 如用连续的空白符进行切割

# 元字符

  • 所谓元字符就是指在正则表达式中具有特殊意义的专用字符
  • 元字符是构成正则表达式的基本元件
  • 正则表达式就是由一系列的元字符组成

# 特殊字符

# . 任意字符(除换行符)

  • first
匹配文本 abcde\n
正则表达式 .
匹配数量 7
匹配结果 a、b、c、d、e、\、n
  • second
匹配文本 abcde\nabc
正则表达式 ab.
匹配数量 2
匹配结果 abc、abc
  • third
匹配文本 c:\poloyy
正则表达式 ..\\
匹配数量 1
匹配结果 c:\

# \w 任意字母、数字、下划线

  • first
匹配文本 0198aAzZ\w哎_-
正则表达式 \w
匹配数量 10
匹配结果 0、1、9、8、a、A、z、Z、w、_
  • second
匹配文本 0198aAzZ\w哎_-
正则表达式 \w.\w
匹配数量 3
匹配结果 019、8aA、Z\w
  • third
匹配文本 0198aAzZ\w哎_-
正则表达式 \w.\\w
匹配数量 1
匹配结果 zZ\w

# \W 任意非字母、数字、下划线

# \d 任意数字

  • first
匹配文本 123阿a\
正则表达式 \d
匹配数量 3
匹配结果 1、2、3
  • second
匹配文本 123阿a\
正则表达式 \d\w\d.
匹配数量 1
匹配结果 23阿a

# \D 任意非数字

# 空白符

# \r 回车符

# \n 换行

# \f 换页符

# \t 制表符(tab键)

# \s 任意空白符

# \S 任意非空白符

在实际使用的过程中\s已经满足了大部分场景的换行符,所以其他不用考虑即可。只需要记住\s与\S

# 量词

# * 0到多次

  • first
匹配文本 yy12菠萝
正则表达式 \w*
匹配数量 1
匹配结果 yy12
  • second
匹配文本 yy12_萝
正则表达式 .1*
匹配数量 4
匹配结果 y、y1、_、萝
  • third
匹配文本 yy_菠萝
正则表达式 \d*\w*
匹配数量 1
匹配结果 yy_

# + 1到多次

  • first
匹配文本 yy12菠萝
正则表达式 \w+
匹配数量 1
匹配结果 yy12
  • second
匹配文本 yy11112菠萝
正则表达式 .1+
匹配数量 1
匹配结果 y1111
  • third
匹配文本 yy_菠萝
正则表达式 \d+\w+
匹配数量 0
匹配结果 \d起码需要匹配到一个数字,但是文本中没有数字

# ? 0到1次

  • first
匹配文本 yy12菠萝
正则表达式 \w?
匹配数量 6
匹配结果 y、y、1、2、空、空
  • second
匹配文本 yy12菠萝
正则表达式 \w?
匹配数量 6
匹配结果 y、y、1、2、空、空
  • third
匹配文本 yy12菠萝
正则表达式 \w?
匹配数量 6
匹配结果 y、y、1、2、空、空

# {n} 出现n次

  • first
匹配文本 yy12菠萝测试
正则表达式 y{2}\d{1}\w.{2}
匹配数量 1
匹配结果 yy12菠萝
  • second
匹配文本 13027608010
正则表达式 ^130\d{8}$
匹配数量 1
匹配结果 13027608010
  • third
匹配文本 023-81200222、023-81200221、023-81200220
正则表达式 0\d{2}-\d{8}
匹配数量 3
匹配结果 023-81200222 023-81200221 023-81200220

# {n,} 出现最少n次

  • first
匹配文本 poloyy
正则表达式 y{1,}
匹配数量 1
匹配结果 yy
  • second
匹配文本 13027608010
正则表达式 ^130\d{1,}$
匹配数量 1
匹配结果 13027608010
  • third
匹配文本 023-81200222、023-81200221、023-81200220
正则表达式 0\d{1,}-\d{1,}
匹配数量 3
匹配结果 023-81200222 023-81200221 023-81200220

# {n,m} 出现n到m次

  • first
匹配文本 poloyy菠萝
正则表达式 yy菠1{0,1}
匹配数量 1
匹配结果 yy菠
  • second
匹配文本 13027608010
正则表达式 ^130\d{1,8}$
匹配数量 1
匹配结果 13027608010
  • third
匹配文本 023-81200222、023-81200221、023-81200220
正则表达式 0\d{1,2}-\d{1,8}
匹配数量 3
匹配结果 023-81200222 023-81200221 023-81200220

# 范围

# | 或。 如:ab|bc 代表ab或bc

# [多个普通字符] 多选一。 匹配括号中任意单个元素

[]里面写再多的字符集合,最终只会匹配一个字符,和元字符一样,如果需要重复匹配需要加上限定符

  • first

    • 正则表达式:\(?0\d{2}[)-]?\d{8}\
    • 可以匹配到字符串
      • (010)88886666
      • 010-88886666
      • 01088886666
  • second

    • 正则表达式:[123aA;]
    • 可以匹配到字符串
      • 只能匹配到[]里面的一个字符

# [a-z] 匹配a-z之间任意单个元素(按照ASCII,包含a、z)

#
  • first
    • 正则表达式:[\u4e00-\u9fa5]
    • 可以匹配到字符串
      • 任意中文
  • second
    • 正则表达式:^\d[a-gA-Z5-9]{2,4}
    • 分析
      • 数字开头
      • a-g或A-Z或5-9任取2-4位
    • 可以匹配到字符串
      • 6aY
      • 6aY7
      • 6aY78

# [^多个普通字符] 取反,不能是括号中的任意字符

  • first
    • 正则表达式:[^abcdA-Z-=]
    • 分析
      • 可以匹配非a、b、c、d、A-Z、(、)、-、= 以外的字符
    • 可匹配到的字符串
      • e
      • f
      • \
      • [

# 断言

# \b 单词的开头或结束

  • first
匹配文本 poloyy
正则表达式 \bpoloyy\b
匹配数量 1
匹配结果 poloyy
  • second
匹配文本 poloyy
正则表达式 \bpo
匹配数量 1
匹配结果 poloyy
  • third
匹配文本 poloyy1
正则表达式 \bpo....\d\b
匹配数量 1
匹配结果 poloyy1
  • four
匹配文本 y1菠萝_A
正则表达式 \b\w.
匹配数量 2
匹配结果 y1、_A
  • \b其实不匹配任何字符,它只匹配位置(开头,结尾)
  • 相当于单词的开头或结尾,有点类似^、$
  • 单词:连起来的字母、数字、下划线,但不包括汉字(如four)的例子,一般可以用元字符\w表示

# \B 和\b相反

# ^ 匹配字符串(行)的开头

  • first
匹配文本 菠萝_A
正则表达式 ^菠.
匹配数量 1
匹配结果 菠萝
  • second
匹配文本 _123
正则表达式 ^_\d
匹配数量 1
匹配结果 _1

^和\b不一样,^是匹配行开始的任意字符,可以包括汉字

# $ 匹配字符串(行)的结尾

  • first
匹配文本 菠2萝_
正则表达式 \d._$
匹配数量 1
匹配结果 2萝_
  • second
匹配文本 123菠萝
正则表达式 \b\w\d\d菠萝$
匹配数量 1
匹配结果 123菠萝

$和\b不一样,$是匹配行结束的任意字符,可以包括汉字

# 分组

# () 子表达式,可在正则表达式中再套一个子表达式

# 环视

# 贪婪模式与非贪婪模式