元字符
特殊的字符,术语叫 metacharacters(元字符)。
它们出现在正则表达式字符串中,不是表示直接匹配他们, 而是表达一些特别的含义。
. * + ? \ [] ^ $ {} | ()
.
表示要匹配除了换行符之外的任何单个字符。
*
表示匹配前面的子表达式任意次,包括0次。
紧跟在.
后面, 表示 任意字符可以出现任意次。
+
表示匹配前面的子表达式一次或多次,不包括0次。
[]
表示要匹配指定的几个字符之一 。
^
- 表示匹配字符串的开始位置。
- 用在
[]
中表示取反。
$
表示匹配字符串的结束位置。
{}
表示前面的字符匹配 指定的次数 。
语法 | 匹配 |
---|---|
{n,m} | 匹配前面子表达式n到m次 |
{n} | 匹配前面子表达式n次 |
{n,} | 匹配前面子表达式至少n次 |
{,m} | 匹配前面子表达式之多m次 |
?
懒惰匹配,表示匹配前面的子表达式0次或1次。
语法 | 匹配 |
---|---|
*? | 重复任意次,但尽可能少重复 |
+? | 重复一次或多次,但尽可能少重复 |
{n,m}? | 重复n到m次,但尽可能少重复 |
<html><head><title>Title</title>匹配所有出现的标签
贪婪匹配:<.*>
懒惰匹配:<,*?>
\
转义符。
-
转义元字符
\. \* \+ \$ \\
元字符
.
、*
、+
、$
等用在[]
中匹配字符本身时,不需要使用\
进行转义。但是元字符
\
、^
用在[]
中匹配字符本身时,情况特殊。 -
匹配某种字符类型
语法 匹配 \d 匹配0-9之间任意一个数字字符,等价于表达式 [0-9] \D 匹配任意一个不是0-9之间的数字字符,等价于表达式 [ ^0-9] \s 匹配任意一个空白字符,包括 空格、tab、换行符等,等价于表达式 [\t\n\r\f\v] \S 匹配任意一个非空白字符,等价于表达式 [ ^ \t\n\r\f\v] \w 匹配任意一个文字字符,包括大小写字母、数字、下划线,等价于表达式 [a-zA-Z0-9],缺省情况也包括 Unicode文字字符,如果指定 ASCII 码标记,则只包括ASCII字母 \W 匹配任意一个非文字字符,等价于表达式 [ ^a-zA-Z0-9]
|
表示匹配 其中之一 。
特别要注意的是, 竖线在正则表达式的优先级是最低的, 这就意味着,竖线隔开的部分是一个整体。
()
组选择。组就是把正则表达式匹配的内容 里面其中的某些部分标记为某个组。目的是对以匹配的字符中进一步提取关心的内容。
预查断言
表达式 | 描述 |
---|---|
(?=) | 正向预查。比如Code(?=Sheep) 能匹配CodeSheep 中的Code ,但不能匹配CodePig 中的Code 。 |
(?!) | 正向否定预查。比如Code(?!Sheep) 不能匹配CodeSheep 中的Code ,但能匹配CodePig 中的Code 。 |
(?<=) | 反向预查。比如(?<=Code)Sheep 能匹配CodeSheep 中的Sheep ,但不能匹配ReadSheep 中的Sheep 。 |
(?<!) | 反向否定预查。比如(?<!Code)Sheep 不能匹配CodeSheep 中的Sheep ,但能匹配ReadSheep 中的Sheep |