一、正则表达式匹配字符
一般字符 | 涵义说明 |
---|---|
. | 匹配任意除换行符“\n”外的字符。在DOTALL模式中也能匹配换行符 |
\ | 转义字符,使后一个字符改变原来的意思。如果字符串中有字符需要匹配,可以使用*或者字符集[] |
[…] | 字符集(字符类)。对应的位置可以是字符集中任意字符。字符集中的字符可以逐个列出,也可以给出范围,如[abc]或[a-c]。第一个字符如果是则表示取反,如[abc]表示不是abc的其它字符 |
预定义字符集 (也可以卸载字符集[…]中) | 涵义说明 |
---|---|
\d | 数字:[0-9] |
\D | 非数字:[^\d] |
\s | 空白字符:[<空格> \t \r \n \f \v] |
\S | 非空白字符:[^\s] |
\w | 单词字符:[A-Za-z0-9] |
\W | 非单词字符:[^\w] |
数量词 | 说明 |
---|---|
* | 匹配前一个字符0次或无限次(任意次数) |
+ | 匹配前一个字符1次或无限次(至少1次) |
? | 匹配前一个字符0次或1次(最多1次) |
{N} | 匹配前一个字符N次 |
{M,N} | 匹配前一个字符M至N次(M小于N) |
{,N} | 匹配前一个字符0至N次(最多N次) |
{M,} | 匹配前一个字符M次至无限次(最少M次) |
*? +? ?? {M,N}? | 使得* + ? {M,N}变成非贪婪模式(取最少的次数) |
边界匹配(不消耗待匹配字符串中的字符) | 说明释义 |
---|---|
^ | 匹配字符串开头。在多行模式中匹配每一行的开头 |
$ | 匹配字符串末尾。在多行模式中匹配每一行的末尾 |
\A | 仅仅匹配字符串开头 |
\Z | 仅仅匹配字符串末尾 |
\b | 匹配\w和\W之间 |
\B | [^\b] |
逻辑分组 | 释义 |
---|---|
| | |代表左右表达式任意匹配一个。它总是先尝试匹配左边的表达式,一旦成功则跳过匹配右边的表达式 |
(…) | 被括起来的表达式将作为分组,从表达式左边开始每遇到一个分组的左括号(,编号+1。另外,分组表达式作为一个整体,可以后接数量词。表达式中的|仅仅在该组中有效 |
(?p<名字>…) | 分组,除了原有的编号外再指定一个额外的别名 |
<number> | 引用编号为的分组匹配到的字符串。如r’(\d)abc\1’ 匹配:1abc1;5abc5 |
(?p=name) | 引用别名为的分组匹配到的字符串 |
特殊构造(不作为分组) | 释义 |
---|---|
(?:…) | (…)的不分组版本,用于使用’ |
(?iLmsux) | iLmsux的每个字符代表一个匹配模式,只能用在正则表达式的开头,可选多个。 |
(?#…) | #后的内容将作为注释被忽略 |
(?=…) | =之后的字符串内容需要匹配表达式才能成功匹配。不消耗字符串内容 |
(?!..) | !之后的字符串内容需要不匹配表达式才能成功匹配。不消耗字符串内容 |
(?<=…) | 之前的字符串内容需要匹配表达式才能成功匹配 |
(?<!..) | 之前的字符串内容需要不匹配表达式才能成功匹配。不消耗字符串内容 |