常用元字符
- 例子: hi, what are you doing? candy?
\b
匹配单词的开始处或结尾处
如何正确的匹配hi
?我们可以使用\bhi
来匹配,但是如果要匹配的单词是: him,high,hidden
等单词,那么使用\bhi
就不能精确匹配出hi
,所以我们可以使用\bhi\b
该方式精确匹配出hi
,该正则表达式理解为,匹配以h开始并且以i结束的词。
.
匹配除了换行符以外的任意字符
上面的列子精确的匹配了hi
,但是现在又新增一个需求,想要匹配hi
以及后面的candy
。于是想到了使用\bhi\b.\bcandy\b
来匹配,但是该语法有个限制,只能匹配一个字符,比如只能匹配hi,candy、hi1candy
这种类似的字符,但无法匹配hi, what are you doing? candy?
这样的字符,匹配的数量有限制。
<span id="jump"></span>
为了解决.
只能一个任意字符的问题,我们可以将*
与.
联合使用,写出这样的表达式\bhi\b.*\bcandy\b
,该表达式语义为: 匹配以h
开头i
结尾且中间为除换行符以外的任意字符,且可连续匹配该字符任意次,之后以cand
开始以y
结束的内容。
\d
匹配数字
现在我们有一个需求,要求匹配以15
开头的手机号,如:15XXXXXXXXX
我们可以使用\d
写出15\d\d\d\d\d\d\d\d\d
这样的表达式。但是这样写比较麻烦;我们可以改成这样: 15\d{9}
,该表达式表示: 匹配15之后的任意9个数字。
^
匹配字符串的开始处,$ 匹配字符串的结束处。
上面的例子虽然可以匹配15开头的手机号,但是如果我们输入as15111111111sd
这样的也能被匹配到,是因为我们没有做限制,现在我们就对上面的表达式改进为: ^15\d{9}$
解除元字符限制
当我们想使用元字符本身的时候,可以使用\
对元字符进行转义,比如我相匹配www.baidu.com
,我们可以使用www\.baidu\.com
进行转义匹配,此外还比如匹配计算机盘符:D:\\User
对应的是D:\User
。其他元字符也是如此: 比如使用*
可以换成\*
等
限定符
*
前面的内容可以连续重复0次或任意次数,最终使得整个表达式得以匹配
上面已经有例子讲过的例子: 用*进行匹配
+
前面的内容可以连续重复至少1次或任意次数,最终使得整个表达式得以匹配
使用hi, what are you doing? candy?
的例子,我们要匹配包含hi
开始,并以candy
结束的单词。可以这样写: ^\bhi\b.+\bcandy\b$
。该表达式可以匹配hi, what are you doing? candy?
这样的词组,但是无法匹配hicandy
这样的词组。因为+
的规则是至少是匹配重复的1次。 如果要匹配数字呢?比如匹配15
开头的数据,可以这样写:15\d+
。