正则表达式表
Posted 傲娇的喵酱
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了正则表达式表相关的知识,希望对你有一定的参考价值。
表示法 | 描述 | 正则表达式示例 |
literal | 匹配文本字符串的字面值 literal | foo |
re1|re2 | 匹配正则表达式 re1 或者 re2 | foo|bar |
. | 匹配任何字符(除了\n 之外) | b.b |
^ | 匹配字符串起始部分 | ^Dear |
$ | 匹配字符串终止部分 | /bin/*sh$ |
* | 匹配 0 次或者多次前面出现的正则表达式 | [A-Za-z0-9]* |
+ | 匹配 1 次或者多次前面出现的正则表达式 | [a-z]+\.com |
? | 匹配 0 次或者 1 次前面出现的正则表达式 | goo? |
{N} | 匹配 N 次前面出现的正则表达 | [0-9]{3} |
{M,N} | 匹配 M~N 次前面出现的正则表达式 | [0-9]{5,9} |
[…] | 匹配来自字符集的任意单一字符 | [aeiou] |
[..x−y..] | 匹配 x~y 范围中的任意单一字符 | [0-9], [A-Za-z] |
[^…] | 不匹配此字符集中出现的任何一个字符,包括某一范围的字符(如果在此字符集中出现) | [^aeiou], [^A-Za-z0-9] |
(*|+|?|{})? | 用于匹配上面频繁出现/重复出现符号的非贪婪版本(*、+、?、{}) | .*?[a-z] |
(…) | 匹配封闭的正则表达式,然后另存为子组 | ([0-9]{3})?,f(oo|u)bar |
特殊字符 | ||
\d | 匹配任何十进制数字,与[0-9]一致(\D 与\d 相反,不匹配任何非数值型的数字) | data\d+.txt |
\w | 匹配任何字母数字字符,与[A-Za-z0-9_]相同(\W 与之相反,不匹配任何字母数字字符) | [A-Za-z_]\w+ |
\b | 匹配任何单词边界(\B 与之相反) | \bThe\b |
\N | 匹配已保存的子组 N(参见上面的(…)) | price: \16 |
\c | 逐字匹配任何特殊字符 c(即,仅按照字面意义匹配,不匹配特殊含义) | \., \\, \* |
\A(\Z) | 匹配字符串的起始(结束)(另见上面介绍的^和$) | \ADear |
扩展表示法 | ||
(?iLmsux) | 在正则表达式中嵌入一个或者多个特殊“标记”参数(或者通过函数/方法) | (?x),(? im) |
(?:…) | 表示一个匹配不用保存的分组 | (?:\w+\.)* |
(?P…) | 像一个仅由 name 标识而不是数字 ID 标识的正则分组匹配 | (?P) |
(?P=name) | 在同一字符串中匹配由(?P<name)分组的之前文本 | (?p=data) |
(?#…) | 表示注释,所有内容都被忽略 | (?#comment) |
(?=…) | 匹配条件是如果…出现在之后的位置,而不使用输入字符串;称作正向前视断言 | (?=.com) |
(?!…) | 匹配条件是如果…不出现在之后的位置,而不使用输入字符串;称作负向前视断言 | (?!.net) |
(?<=…) | 匹配条件是如果…出现在之前的位置,而不使用输入字符串;称作正向后视断言 | (?<=800-) |
(?<!…) | 匹配条件是如果…不出现在之前的位置,而不使用输入字符串;称作负向后视断言 | (?<!192\.168\.) |
(?(id/name)Y|N) | 如果分组所提供的 id 或者 name(名称)存在,就返回正则表达式的条件匹配 Y, 如 果不存在,就返回 N;|N 是可选项 |
(?(1)y|x) |
特殊字符\b 和\B 可以用来匹配字符边界。而两者的区别在于\b 将用于匹配一个单词的边 界,这意味着如果一个模式必须位于单词的起始部分,就不管该单词前面(单词位于字符串 中间)是否有任何字符(单词位于行首)。同样,\B 将匹配出现在一个单词中间的模式(即, 不是单词边界)。下面为一些示例。
正则表达式模式 | 匹配的字符串 |
at | home | at、home |
r2d2 | c3po | r2d2、c3po |
bat | bet | bit | bat、bet、bit |
f.o | 匹配在字母“f”和“o”之间的任意一个字符;例如 fao、f9o、f#o 等 |
.. | 任意两个字符 |
.end | 匹配在字符串 end 之前的任意一个字符 |
^From | 任何以 From 作为起始的字符串 |
/bin/tcsh$ | 任何以/bin/tcsh 作为结尾的字符串 |
^Subject: hi$ | 任何由单独的字符串 Subject: hi 构成的字符串 |
特殊字符\b 和\B 可以用来匹配字符边界 | |
the | 任何包含 the 的字符串 |
\bthe | 任何以 the 开始的字符串 |
\bthe\b | 仅仅匹配单词 the |
\Bthe | 任何包含但并不以 the 作为起始的字符串 |
创建字符集 | |
b[aeiu]t | bat、bet、bit、but |
[cr][23][dp][o2] | 一个包含四个字符的字符串,第一个字符是“c”或“r”,然后是“2”或“3” ,后面 是“d”或“p”,最后要么是“o”要么是“2”。例如,c2do、r3p2、 r2d2、c3po 等 |
限定范围和否定如果脱字符(^)紧跟在左方括号后面,这个符号就表示不匹配给定字符 集中的任何一个字符。 |
|
z.[0-9] | 字母“z”后面跟着任何一个字符,然后跟着一个数字 |
[r-u][env-y][us] | 字母“r”、“s”、“t”或者“u”后面跟着“e”、“n”、“v”、“w”、“x”或者“y”, 然后跟着“u”或者“s” |
[^aeiou] | 一个非元音字符 |
[^\t\n] | 不匹配制表符或者\n |
[“-a] | 在一个 ASCII 系统中,所有字符都位于“”和“a”之间,即 34~97 之间 |
一、
如果问号紧跟在任何使用闭合操作符的匹配后面,它将直接要求正则表 达式引擎匹配尽可能少的次数。
“尽可能少的次数”是什么意思?当模式匹配使用分组操作符时,正则表达式引擎将试图 “吸收”匹配该模式的尽可能多的字符。
这通常被叫做贪婪匹配。问号要求正则表达式引擎去 “偷懒”,如果可能,就在当前的正则表达式中尽可能少地匹配字符,留下尽可能多的字符给 后面的模式(如果存在)
正则表达式模式 | 匹配的字符串 |
[dn]ot? | 字母“d”或者“n”,后面跟着一个“o”,然后是最多一个“t”,例如,do、no、dot、not |
0?[1-9] | 任何数值数字,它可能前置一个“0”,例如,匹配一系列数(表示从 1~9 月的数值),不 管是一个还是两个数字 |
[0-9]{15,16} | 匹配 15 或者 16 个数字(例如信用卡号码) |
</?[^>]+> | 匹配全部有效的(和无效的)html 标签 |
[KQRBNP][a-h][1-8]-[a-h][1-8] | 在“长代数”标记法中,表示国际象棋合法的棋盘移动(仅移动,不包括吃子和将军)。 即“K”、“Q”、“R”、“B”、“N”或“P”等字母后面加上“a1”~“h8”之间的棋盘坐标。 前面的坐标表示从哪里开始走棋, 后面的坐标代表走到哪个位置(棋格)上 |
二、表示字符集的特殊字符
与使用“0-9”这个范围表示十进制数相比, 可以简单地使用 d 表示匹配任何十进制数字。
另一个特殊字符(\w)能够用于表示全部字母 数字的字符集,相当于[A-Za-z0-9_]的缩写形式,
\s 可以用来表示空格字符。
这些特殊字符的 大写版本表示不匹配;例如,\D 表示任何非十进制数(与[^0-9]相同),等等。 使用这些缩写,可以表示如下一些更复杂的示例。
以上是关于正则表达式表的主要内容,如果未能解决你的问题,请参考以下文章