正则表达式[0-9]对正则表达式处理器传递的信息是“匹配0到9范围内的任意数字”。正则表达式将方括号视为特殊的元字符,因此方括号不参与匹配。元字符是在正则表达式中有特殊含义的字符,也是保留字符。[0-9]这种形式的正则表达式称作字符组,有时也叫字符集。
[012789]这个字符组只会匹配列出0、1、2、7、8、9
比如我们要匹配一个北美电话号码:707-827-7019,我们可以使用[0-9]来匹配,但它并不能匹配“-”,我们可以使用\d\d\d-\d\d\d-\d\d\d\d来匹配这个号码,重复\d三次和四次就可以分别匹配三个和四个数字。该表达式中的连字符是一个字面值,因此会被原样匹配。
匹配连字符的方法:
- 和上面表达式一样,使用连字符本身(-)来匹配连字符
- 也可以用转义的大写D(\D),它匹配任何一个非数字字符。
- 还可以用点号(.)来匹配连字符,点号是一个通配符,可以匹配任意字符(但某些情况下不能匹配行起始符),比如换行符(U+000A)就不能用点号来匹配。
我们也可以用\d{3}-?\d{3}-?\d{4}来匹配上述说到的电话号码。花括号中的数字表示待查找的数字出现的次数。包含数字的花括号是一种量词。花括号本身用做元字符。问号是另一种量词,在以上表达式中表示连字符是可选的。也就是说,连字符可以不出现或只出现一次。
例如加号(+)表示“一个或多个”,星号(*)表示“零个或多个”
(\d{3}[.-]?){2}\d{4}用来匹配电话号码。
左圆括号(为捕获分组的起始符;
反斜杠\为字符组简写式的起始符(对之后的字符进行转义);
字符d为字符组简写式的结束符(d匹配0到9范围内的任意数字);
左花括号{为量词起始符;
数字3为匹配的最小数量;
右花括号}为量词的结束符;
左方括号[为字符数组的起始符;
点号.(匹配点号本身);
连字符-匹配连字符的本身;
右方括号]为字符组的结束符;
问号?表示量词“零个或一个”;
右圆括号)为捕获分组的结束符;
{2}前面表达式重复两次;
数字4为匹配的最大数量;
本文的演示可以在https://www.regexpal.com/试试