元字符和普通字符是正则表达式的基本构件。

元字符一般都有特殊的含义。大致分为两种:一种是用来匹配文本的(比如.),另一种是正则表达式的语法所要求的(比如[和])。

元字符包括:

  • 转译元字符的 \
  • 匹配特定字符的 .、[]、|
  • 匹配重复次数的 *、+、?、{}
  • 匹配位置的 \b、\B、^、 $
  • 匹配数字、数字与字母的 \d、\D、\w、\W
  • 匹配空白元字符的 \f、\n、\r、\t、\v、\s、\S
  • 匹配大小写的 \l、\L、\u、\U、\E

转译元字符

\

例:

\.匹配普通字符.

\\匹配普通字符\

\n 匹配一个换行符

匹配特定字符类别

.

要匹配包括 \n 在内的任何字符,请使用像(.|\n)的模式。

同一个正则表达式里允许使用多个.字符,它们可以连续出现,也可以间隔出现。

[]

例:[0-9]匹配0、1、2、3、4、5、6、7、8、9中的任意一个

^[]匹配除了指定集合的字符。

例:^[0-9] 匹配文本中除了0-9之外的其他字符

x|y

例如,'z|food' 能匹配 "z" 或 "food"。'(z|f)ood' 则匹配 "zood" 或 "food"。

匹配重复次数

*

例如,zo* 能匹配 "z" 以及 "zoo"。

+

例如,[0-9]+匹配一个或多个连续的数字

?

例如,"http(s)?" 可以匹配 "http" 或 "https" 。

?跟在匹配重复次数的元字符(*, +, ?, {n}, {n,}, {n,m})后面还可以表示将这些贪婪型的元字符(匹配尽可能多的字符)转变成懒惰型元字符(匹配尽可能少的字符)

{n}

例如,'o{2}' 不能匹配 "Bob" 中的 'o',但是能匹配 "food" 中的两个 o。

匹配颜色RGB值 如#fa31eb #[0-9A-Fa-f]{6}

{n,}

例如,'o{2,}' 不能匹配 "Bob" 中的 'o',但能匹配 "foooood" 中的所有 o。'o{1,}' 等价于 'o+'。'o{0,}' 则等价于 'o*'。

{n,m}

例如,"o{1,3}" 将匹配 "fooooood" 中的前三个 o。'o{0,1}' 等价于 'o?'。请注意在逗号和两个数之间不能有空格。

对其他元字符进行转译。
匹配除换行符(\n、\r)之外的任何单个字符。
匹配[]指定的集合里的多个字符中的某一个
匹配 x 或 y
匹配前面的子表达式`零次或多次`。等价于`{0,}`
匹配前面的子表达式`一次或多次`。等价于 `{1,}`
匹配前面的子表达式`零次或一次`。 等价于 `{0,1}`
n 是一个非负整数。匹配确定的 n 次。
n 是一个非负整数。至少匹配 n 次。
m 和 n 均为非负整数,其中n <= m。最少匹配 n 次且最多匹配 m 次。

注:上述匹配重复次数的元字符(*, +, ?, {n}, {n,}, {n,m})都是贪婪型元字符,它们在进行匹配时的行为模式是多多益善而不是适可而止的。它们会尽可能的从一段文本的开头一直匹配到这段文本的结尾,而不是从这段文本的开头匹配到碰到第一个匹配时为止。

不需要这种贪婪匹配时需要使用这些元字符的懒惰版本(匹配尽可能少的字符)。只需要在贪婪型元字符加上一个?后缀即可。如[0-9]+?

例如,对于字符串 "oooo",'o+?' 将匹配单个 "o",而 'o+' 将匹配所有 'o'。

匹配位置

位置匹配利用边界限定符来解决在什么地方进行字符串匹配操作的问题。

\b

b是英文boundary(边界)的首字母。

例如, er\b 可以匹配"never" 中的 'er',但不能匹配 "verb" 中的 'er'。

如果想匹配完整的单词,就必须在想要匹配的文本前后都加上\b限定符。
例如,\bcar\b将匹配car这个单词

\B

例如,er\B 能匹配 "verb" 中的 'er',但不能匹配 "never" 中的 'er'。

^

如果^出现在[]之前,表示[]的取非操作

$

匹配数字

\d

\D

匹配字母和数字

\w

小写w

\W

大写W

匹配空白元字符

\f

匹配一个换页符。等价于 \x0c 和 \cL。

\n

匹配一个换行符。等价于 \x0a 和 \cJ。

\r

匹配一个回车符。等价于 \x0d 和 \cM。

\t

匹配一个制表符。等价于 \x09 和 \cI。

\v

匹配一个垂直制表符。等价于 \x0b 和 \cK。

\s

匹配任何空白字符,包括空格、制表符、换页符等等。等价于 [ \f\n\r\t\v]。

\S

匹配任何非空白字符。等价于 [^ \f\n\r\t\v]。

匹配大小写

\l

\L

\u

\U

\E

匹配一个单词边界,也就是指单词和空格间的位置。
匹配非单词边界。
匹配输入字符串的开始位置。如果设置了 RegExp 对象的 Multiline 属性,^ 也匹配 \n 或 \r 之后的位置。
匹配输入字符串的结束位置。如果设置了RegExp 对象的 Multiline 属性,$ 也匹配 \n 或 \r 之前的位置。
匹配任意一个数字字符。等价于 [0-9]
匹配任意一个非数字字符。等价于 [^0-9]
匹配任意一个字母数字字符(大小写均可)或下划线字符。等价于[A-Za-z0-9_]
匹配任意一个非字母数字字符(大小写均可)或非下划线字符。等价于[^A-Za-z0-9_]
把写一个字符转换成小写
把\L到\E之间的字符全部转换成小写
把写一个字符转换成大写
把\L到\E之间的字符全部转换成大写
结束\L或\U转换