正则表达式基础

1.入门

正则表达式可以匹配某些特定的数据,如果你想要从庞大的文字信息中提取出一小段你需要的数据,那么正则表达式或许能帮到你。

1.1字符组

**[]**允许匹配一组可能出现的字符。
例如:
1.想要只用字符组匹配Hello和hello

[Hh]ello

2.使用字符组匹配多个单词,匹配Jack,jack,jaca,Jaca

[Jj]ac[ka]

1.2区间

有一些常见的字符组非常大,比如,我们要匹配任意的数字,如果依照上述代码,每次我们都需要使用[0123456789]
但是这样好吗?

如果要匹配从a-z的字母呢?我想你肯定不愿意从a写到z了!
为了适应这一点,正则表达式引擎在字符组中使用连字符(-)代表区间,依照这个规则,我们可以总结出三点:

  1. 要匹配任意数字可以使用[0-9]
  2. 如果想要匹配所有小写字母,可以写成[a-z]
  3. 想要匹配所有大写字母可以写成[A-Z]
    例如:
    1.匹配所有的数字,大小写字母
[0-9a-zA-Z]

2.匹配a-z的小写字母和A-F的大写字母

[a-zA-F]

1.3特殊字符

正则表达使用了 - 号代表了区间,但是我们有时候需要匹配的符号就是 -号,该怎么办呢?

这个时候我们需要对-号进行转义操作,即 \-

在正则中使用 \ 就可以进行对特殊符号进行转义,对 - 进行转义就可以表示为 \-,即 \- 就代表了 - 号本身。

1.4取反

到目前为止,我们定义的字符组都是由可能出现的字符定义,不过有时候我们可能希望根据不会出现的字符定义字符组。
例如:匹配不包含数字的字符组,可以通过在字符数组开头使用 ^ 字符实现取反操作,从而可以反转一个字符组(意味着会匹配任何指定字符之外的所有字符)。

[^0-9]

例如:
1.匹配后边不包含的数据

爱[^你]

2.匹配不含小写字母的数据

[^a-z]

2.快捷方式

2.1常用字符快捷方式

字符描述
\d匹配0-9的数字
\w匹配字母数字和下划线
.匹配除换行符意外的任何单个字符
\s匹配所有空白符,包含换行
\S匹配非空白符,不包括换行
\t匹配一个制表符
\r匹配一个回车符
\n匹配一个换行符

2.2常用定位符和限定符

字符描述
*{0,}
+{1,}
?匹配前面的子表达式零次或一次,或者指明一个非贪婪限定符
{n}n 是一个非负整数。匹配确定的 n 次。
{n,}n 是一个非负整数。至少匹配n 次。
{n,m}m 和 n 均为非负整数,其中n <= m。最少匹配 n 次且最多匹配 m 次。
^匹配输入字符串开始的位置。
$匹配输入字符串结尾的位置。
\b匹配一个单词边界,即字与空格间的位置。
\B非单词边界匹配。

2.3举例

1.匹配空白分隔的单词

[a-zA-Z]+\s

2.匹配单词边界:仅匹配有边界的master单词。

\bmaster\b

3.匹配数字和小写字母

[\da-z]

4.快捷方式取反:请使用正则表达式匹配开头不以数字开头的单词

^\D

5.编写正则表达式匹配以Java结尾的字符串

Java$

6.匹配任意字母之后是ar的字符串

[a-zA-Z]ar

7.使用正则来匹配 favoritefavourite这两种写法

favou?rite

8.正则表达式提取电话号码,假设电话号码有两种规则:

  • 3个数字开头,后面7个数字,例如:020-7281333
  • 4个数字开头,后面7个数字,例如:0731-8283431
\d{3,4}-\d{7}

9.正则表达式匹配以f开头的数据.

^f.+

10.使用正则表达式匹配手机号码,假设手机号码规则如下:

  • 必须是11位的数字;
  • 第一位数字必须以1开头,第二位数字可以是[3,4,5,7,8]中的任意一个,后面9个数是[0-9]中的任意一个数字。
1[3,4,5,7,8]\d{9}

11.编写正则表达式,匹配以 http开头,以/结尾的所有数据。

^http.*/$

3.实践

1.请提取所有以fu结尾的单词。

fu$

2.匹配电话号码,假设电话号码可以有下列两种方式:

  • 0XX-XXXXXXX,例如020-8810456
  • 0XXXXXXXXX,例如0208810456

020 代表区号,8810456是电话号码,区号第一个数字必须是0,电话号码的第一个数字必须大于等于1

[0]\d{2}\-?[1-9]\d{6}

3.编写正则表达式匹配所有王姓同学。

^王.+

详情请参考胶囊编程教程链接
本文参考了菜鸟教程的正则表达式教程


版权声明:本文为weixin_47666481原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。