Skip to content

正则表达式的理解

feaswcy edited this page Mar 3, 2019 · 1 revision

正则表达式

正则是一种用来搜索和替换文本字符串的工具

写正则之前需要理解的一些概念

正则教程

一般我们写一个字符串就代表 这个字符文本本身,但有一些字符串可以表示一系列的字符串,类似于linux的glob模式一样,这种字符串本身代表着一种通配,比如串'[0-9]'代表一个数字,这个数字在0-9之间,在正则中只有几个东西和字面的意思不一样

  • . ^ $ * + ? \ | 这八个英文符号
  • () [] {} 三种英文括号
  • 如果想表达上面符号本身所代表的字符串,需要在前面加转移符号 \

因此最重要的其实就是这八个英文符号以及 三个括号所代表的规则~

  • . 匹配任何单个字符,\n ,\r 代表换行的除外
  • ^ 匹配字符串开始的位置,如 ^a 要求字符串的开头是a
  • $ 匹配字符串结束的位置,如 a$要求字符串以a结束
  • *匹配前面的表达式零次或多次
  • +匹配前面的表达式一次或多次
  • ?匹配前面的表达式零次或一次, 当?跟在其他限制符后面时,匹配模式是非贪婪的,将会尽可能少的匹配原来限制符所匹配的内容
  • \ 用来转义,如比配一个字符串 “.” ,需要写成 .,还会有 \b, \B 将普通字符转成具有含义的通配符,常用的这种类型的元字符有\b, \d, \s, \w
  • | 代表或

可以看出 * + ? 这三个都是进行向前匹配一定次数的,更通用的一个写法是o{m,n},标识匹配o的字数在m和n之间。例如 o{1,3} 将匹配“fooooood”中的前三个o。“o{0,1}”等价于“o?”,逗号之间不能有空格,如此来 * + ? 都可以写成{0,} {1,} {0,1}

三种括号的用法

  • () 代表捕获,符合()内正则表达式的内容将会保存在匹配结果的matches中。
  • [] 建立一个匹配集合(或者叫字符组),任何一个字符属于这个集合就可以匹配,比如 [ABCDEFG]可以匹配字母A到G的任何字母,匹配所有字母是[A-Za-z],匹配所有数字是[0-9],注意一下,^在字符组中代表取反,而不是文本开始的位置;- 连字符可以代表数字和字符的范围
  • {} 如上所述,进行指定次数的多次匹配

查看所有的字符含义的正则表达式全集

总结

  • 正则的难度在于在实际中找出文本字符串的规律,写一个可以匹配的正则很容易, 写一个只能匹配的正则很难。
  • 有一个网站可以很好的帮你书写正则:regular expression
Clone this wiki locally