正则表达式学习笔记(二)-----元字符、反义代码、限定字符以及使用正则表达式表示字符串

三、元字符、限定字符以及反义代码

前提依旧是:
在这里插入图片描述

元字符与反义代码

.

注意,在此例中寻找的并不是’ . '所在的位置,而是匹配的是任意字符:
在这里插入图片描述
字符转义:那么如果我想要指定匹配一个’ .'该怎么做?
如果你想查找元字符本身的话,比如你查找.,或者*,就出现了问题:你没办法指定它们,因为它们会被解释成别的意思。这时你就得使用\来取消这些字符的特殊意义。因此,你应该使用.和*。当然,要查找\本身,你也得用\.
例如:deerchao.net匹配deerchao.net,C:\Windows匹配C:\Windows。
在这里插入图片描述

\w | \W

作用是匹配任意一个字母、数字、下划线、汉字 | 作用相反
在这里插入图片描述

\s | \S

作用是匹配任意一个的空白符 | 作用相反(但是\S同样也无法匹配\n换行符等):
在这里插入图片描述

\d && \D

作用是匹配任意一个数字字符 | 作用相反(同样不识别\n):
在这里插入图片描述

\b | \B

作用是匹配一个单词的开始或者结束,也可以理解为匹配一个空格,逗号等字符 |作用相反.

^ | $

^ 和KaTeX parse error: Undefined control sequence: \b at position 11: 都匹配一个位置,这和\̲b̲有点类似。^匹配你要用来查找的…匹配结尾。这两个代码在验证输入的内容时非常有用,比如一个网站如果要求你填写的QQ号必须为5位到12位数字时,可以使用:^ \d{5,12}$。

[^x] | [^aeiou]

匹配 **除了x **以外的任意字符 | 匹配 除了aeiou 这几个字母以外的任意字符。

限定词

注意:限定词是限定其前面的单词或者语法代码而不是后面的

* | + | ?

上面的例子来看,虽然可以指定匹配某些字符,但是最多只能指定一项,那么我如果想让某个字符重复多次,那么我可能需要这些限定字符---------重复零次或更多次 | 重复一次或更多次 | 重复零次或一次:
在这里插入图片描述

{n} | {n,} | {n,m}

而现在这一组限定词,我们不仅可以重复多次,并且可以指定重复的次数--------重复n次 | 重复n次或更多次 | 重复n到m次:
在这里插入图片描述
在regex1中:每匹配最少3个最多5个数字时切割
regex2中:每匹配固定3个连续的数字字母汉字下划线时切割
regex3:每匹配一次"ab"跟着在它之后至少3个数字字母汉字下划线时切割

四、使用正则表达式表示字符串

有了一定的了解之后就可以开始进一步的学习
1、当我想表达一个单词 gread 时候:一般我就可以使用 \bgread\b 匹配gread单词的开头结尾;
2、而当我想表达单词:gread good grand 等以字母 g 开头的单词的时候,可能以上方法就不可行了,会显得十分繁杂,此处我们便可以使用 \bg\w*\b :先是某个单词开始处(\b),然后是字母g,然后是任意数量的字母或数字(\w*),最后是单词结束(\b);
3、当我想匹配一个固定长度的单词(比如 匹配所有的7个字母的单词 )的时候,我们就可以使用:\b\w{7}\b ,同理, 匹配长度不超过5 的字符: \b\w{,5}\b ;
4、而当我想要限制对方输入,比如我想限制他 全文输入的数字,在10~13位数 ,则: ^\d{10,13}$ ;
5、当打算 任意匹配一个元音字母 时候, [aeiou] 就派上了用场,这个 [] 里面的内容可以理解成“或”的意思,那么如果 想判断一句话的结束 ,我们也可以这样使用: [,.?!;] ;

| 的使用

即分支条件。分枝条件指的是有几种规则,如果满足其中任意一种规则都应该当成匹配,具体方法是用|把不同的规则分隔开,具体实例可看6:
6、当我想 匹配一个ip地址 的时候(比如:192.163.1.1)时,则应该 (\d{1,3}.){3}\d{1,3} ,\d{1,3}匹配1到3位的数字,(\d{1,3}.){3}匹配三位数字加上一个英文句号,(这个整体)重复3次,最后再加上一个一到三位的数字(\d{1,3});当然,这是不正确的ip地址匹配写法,因为我们的每一位ip地址都不可能大于255,所有想要 匹配一个正确的ip地址 ,应该书写的更加麻烦一些: ((25[0-5]|2[0-4]\d|[01]?\d\d?).){3}(2[0-4]\d|25[0-5]|[01]?\d\d?) ,和之前大致相同,但是加了分支条件,此处分了3种情况下:25开头时、非25开头时,以及开头或者十位数不存在时的情况,这样就可以正确匹配到想要的正确ip;

()的转义

相信从6中可以发现,()是一个优先级较高的字符,所有在打印的时候同样需要转义,实例:
7、(010)88886666,或022-22334455,或02912345678,均可以是电话号码的一种表示方式,那我想 匹配这几种电话号码格式,并且不使用分支条件时(?0\d{2}[) -]?\d{8} ,但是仍然会出现问题:
它同样也能匹配010)88886666或(022-22334455这样的“不正确”的格式,所有最后还是要使用 分支条件(?0\d{2})?[- ]?\d{8}|0\d{2}[- ]?\d{8}
这个时候已经可以算完成入门了,之后将涉及到更难的内容。

发布了13 篇原创文章 · 获赞 0 · 访问量 355

猜你喜欢

转载自blog.csdn.net/xiao_xiao_lan/article/details/105233748