正则表达式

278 阅读3分钟

转载自:www.cnblogs.com/zery/p/3438…

正则表达式测试工具McTracer(Regex Match Tracer) v2.1.6.925,下载地址:四五互联移动下载

在线测试 c.runoob.com/front-end/8…

一元字符

"^" :^会匹配行或者字符串的起始位置,有时还会匹配整个文档的起始位置。

"$" :$会匹配行或字符串的结尾。 不能有空格与其它字符

"\b" :不会消耗任何字符只匹配一个位置,常用于匹配单词边界

"\d": 匹配数字

"\w":匹配字母,数字,下划线.

"\s":匹配空格

".":匹配除了换行符以外的任何字符

"[abc]": 字符组 匹配包含括号内元素的字符

反义一元字符

"\W " 匹配任意不是字母,数字,下划线 的字符

"\S" 匹配任意不是空白符的字符

 "\D" 匹配任意非数字的字符

"\B" 匹配不是单词开头或结束的位置

"[^abc]" 匹配除了abc以外的任意字符

量词

贪婪量词会首先匹配整个字符串,尝试匹配时,它会选定尽可能多的内容,如果 失败则回退一个字符,然后再次尝试回退的过程就叫做回溯,它会每次回退一个字符,直到找到匹配的内容或者没有字符可以回退。相比下面两种贪婪量词对资源的消耗是最大的,

懒惰量词使用另一种方式匹配,它从目标的起始位置开始尝试匹配,每次检查一个字符,并寻找它要匹配的内容,如此循环直到字符结尾处。

占有量词会覆盖事个目标字符串,然后尝试寻找匹配内容 ,但它只尝试一次,不会回溯,就好比先抓一把石头,然后从石头中挑出黄金

"*"(贪婪) 重复零次或更多

"+"(懒惰) 重复一次或更多次

"?"(占有) 重复零次或一次

"{n}" 重复n次

"{n,m}" 重复n到m次

"{n,}" 重复n次或更多次

懒惰限定符

"*?" 重复任意次,但尽可能少重复

"+?" 重复1次或更多次,但尽可能少重复

"??" 重复0次或1次,但尽可能少重复

"{n,m}?" 重复n到m次,但尽可能少重复

"{n,}?" 重复n次以上,但尽可能少重复

捕获分组

先了解在正则中捕获分组的概念,其实就是一个括号内的内容 如 "(\d)\d" 而"(\d)" 这就是一个捕获分组,可以对捕获分组进行 后向引用 (如果后而有相同的内容则可以直接引用前面定义的捕获组,以简化表达式) 如(\d)\d\1 这里的"\1"就是对"(\d)"的后向引用

为了让组名更有意义,组名是可以自定义名字的

"\b(?<name>\w+)\b\s\k<name>\b" 用"?<name>"就可以自定义组名了而要后向引用组时要记得写成 "\k<name>";自定义组名后,捕获组中匹配到的值就会保存在定义的组名里

"(exp)" 匹配exp,并捕获文本到自动命名的组里

"(?<name>exp)" 匹配exp,并捕获文本到名称为name的组里

"(?:exp)" 匹配exp,不捕获匹配的文本,也不给此分组分配组号

"(?=exp)" 匹配exp前面的位置

"(?<=exp)" 匹配exp后面的位置

"(?!exp)" 匹配后面跟的不是exp的位置

"(?<!exp)" 匹配前面不是exp的位置

应用

案例一

idea 搜索复制的带有行号的代码,并去除行号

\s*\d{2}\.

并用\n替换所有