一、
如果问号紧跟在任何使用闭合操作符的匹配后面,它将直接要求正则表 达式引擎匹配尽可能少的次数。
“尽可能少的次数”是什么意思?当模式匹配使用分组操作符时,正则表达式引擎将试图 “吸收”匹配该模式的尽可能多的字符。
这通常被叫做贪婪匹配。问号要求正则表达式引擎去 “偷懒”,如果可能,就在当前的正则表达式中尽可能少地匹配字符,留下尽可能多的字符给 后面的模式(如果存在)
正则表达式模式 | 匹配的字符串 |
[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]相同),等等。 使用这些缩写,可以表示如下一些更复杂的示例。
使用这些缩写,可以表示如下一些更复杂的示例。
\w+-\d+ | 一个由字母数字组成的字符串 和一串由一个连字符分隔的数字 |
[A-Za-z]\w* | 第一个字符是字母;其余字符( 如果存在)可以是字母或者数字 |
\d{3}-\d{3}-\d{4} | 美国电话号码的格式,前面是区 号前缀,例如 800-555-1212 |
\w+@\w+\.com | 以 [email protected] 格式表示的 简单电子邮件地址 |