正则表达式就是用来检索某些复杂规则的字符串是否符合规范。
用户在进行注册账号填写邮箱以及电话区号时,这种邮箱和区号就可以用正则来进行匹配,检验是否正确。
入门语法:
正则表达式是由一个个的元字符组成的,每个元字符都有自己进行匹配的原则。
\b是正则表达式规定的一个特殊代码,代表着单词的开头或结尾,也就是单词的分界处。虽然通常英文的单词是由空格,标点符号或者换行来分隔的,但是\b并不匹配这些单词分隔字符中的任何一个,它只匹配一个位置。(这句话在最后会有一点的解释)
先来说几个比较简单的常用的元字符
元字符 说明
. 匹配除换行符以外的任意字符
\w 匹配字母或数字或下划线或汉字
\s 匹配任意的空白符
\d 匹配数字
\b 匹配单词的开始或结束
^ 匹配字符串的开始(可能看起来太小了,这个就是数字键6上面的那个)
$ 匹配字符串的结束
* 重复零次或更多次
+ 重复一次或更多次
? 重复零次或一次
{n} 重复n次
{n,} 重复n次或更多次
{n,m} 重复n到m次
\s匹配任意的空白符,包括空格,制表符(Tab),换行符,中文全角空格等。
\w匹配字母或数字或下划线或汉字等。
*同样是元字符,不过它代表的不是字符,也不是位置,而是数量,它指定前边的内容可以连续重复使用任意次以使整个表达式得到匹配
.*连在一起就意味着任意数量的不包含换行的字符
下面举几个例子对上面几个元字符进行应用:
最简单的正则表达式 hi
它可以精确匹配这样的字符串:由两个字符组成,前一个字符是h,后一个是i。通常,处理正则表达式的工具会提供一个忽略大小写的选项,如果选中了这个选项,它可以匹配hi,HI,Hi,hI这四种情况中的任意一种。
0\d\d-\d\d\d\d\d\d\d\d匹配这样的字符串:以0开头,然后是两个数字,然后是一个连字号“-”,最后是8个数字(也就是中国的电话号码。当然,这个例子只能匹配区号为3位的情形)。
-不是元字符,只匹配它本身(可以理解为在这个位置只能是这个- 标志)
为了避免那么多烦人的重复,我们也可以这样写这个表达式:0\d{2}-\d{8}。这里\d后面的{2}({8})的意思是前面\d必须连续重复匹配2次(8次)。
\bhi\b.*\bLucy\b的意思就很明显了:先是一个单词hi,然后是任意个任意字符(但不能是换行),最后是Lucy这个单词
^\d{5,12}$。{2}的意思是匹配只能不多不少就是重复2次,{5,12}则是重复的次数不能少于5次,不能多于12次,否则都不匹配。
\ba\w*\b匹配以字母a开头的单词,然后是任意数量的字母或数字(\w*),最后是单词结束处(\b)。
\d+匹配1个或更多连续的数字。这里的+是和*类似的元字符,不同的是*匹配重复任意次(可能是0次),而+则匹配重复1次或更多次。
Windows\d+匹配Windows后面跟1个或更多数字
^\w+匹配一行的第一个单词(或整个字符串的第一个单词,具体匹配哪个意思得看选项设置)
\b\w{6}\b 匹配刚好6个字符的单词
^匹配你要用来查找的字符串的开头,$匹配结尾。这两个代码在验证输入的内容时非常有用,比如一个网站如果要求你填写的QQ号必须为5位到12位数字时,可以使用:^\d{5,12}$。
还记得上文里提到的\b只是匹配一个位置吗?要知道是一个单词的开头,这个\b是去匹配开头的分隔符还是匹配开头的第一个字母??
从网上找到了这样一句话:“如果需要更精确的说法,\b匹配这样的位置:它的前一个字符和后一个字符不全是(一个是,一个不是或不存在)\w(匹配字母或数字或下划线或汉字)”这 句话很隐晦的说出了是去匹配第一个字母,而不是去匹配分割符
下面给出一个例子:(这个例子是在一篇博客里搜到的,具体的测试我没有进行过,把它弄过来主要是能更好的理解一下\b)
第一个例子:
myReg.Pattern ="a\b.*h.*"
PrintmyReg.Test("a,chia")
输出的结果为Ture 说明是匹配的a,而不是,
第二个例子:
myReg.Pattern = "a.* \bh.*"
PrintmyReg.Test("a,chia")
输出的结果为flash 说明匹配的是h,而不是c
我的意思是想懂下面的这一段话:
1、\b只能匹配字母、数字、汉字、下划线
2、\b就近匹配,比如\bAB 匹配A,AB\b 匹配B;但如果只写一个\b或者在两个字母、数字、汉字、下划线之间有\b时就在所 有 字符或者两个字母、数字、汉字、下划线之间所有字符去逐个匹配
更详细的文章: https://deerchao.net/tutorials/regex/regex-1.htm