原创

正则表达式的使用

说明:以下测试语言为JAVA,但是基本上通用
主要介绍使用正则表达式的基础部分

学习背景

业务上需要匹配文档中的特定内容,下面我们一起来学习吧。

如果你是实用派请直接移步《正则表达式的使用》章节

正则表达式简介

定义

正则表达式(regular expression)描述了一种字符串匹配的模式(pattern),可以用来检查一个串是否含有某种子串、将匹配的子串替换或者从某个串中取出符合某个条件的子串等。(百度讲的)

为什么要使用它

典型的搜索和替换操作要求您提供与预期的搜索结果匹配的确切文本。虽然这种技术对于对静态文本执行简单搜索和替换任务可能已经足够了,但它缺乏灵活性,若采用这种方法搜索动态文本,即使不是不可能,至少也会变得很困难(能看懂吗?看不懂就别看了,复制的!!!)。
举个栗子:
您很可能使用 ? 和 * 通配符来查找硬盘上的文件。
目前目录下有这些文件如下图:

现在要查找1开头的txt文件,我们会这样做:

*通配符匹配零个或多个字符(这是正则的元字符)

正则表达式的使用

想真正的用好正则表达式,正确的理解元字符是最重要的事情。下表列出了所有的元字符和对它们的描述还有通俗易懂的使用方法。
让我们一起来学习吧

可以打开下面网站直接进行匹配练习
正则表达式在线测试

1.\

这个用来转义,和java中的一样。如:n 匹配字符 n\n 匹配一个换行符。序列 \\ 匹配 \\( 则匹配 (。在正则表达式中()是有特殊含义的,下面会说到。

2.^,$
注:突然发现了编辑器的bug,打某些字符不能正确显示,汗。。
^匹配输入字符串的开始位置。(如果设置了 RegExp 对象的 Multiline 属性,^ 也匹配 ‘\n’ 或 ‘\r’ 之后的位置。这句胡不太懂,有大佬明白的话可以帮忙文章下面解答下)
这句话很好理解,就是要以什么开头,才能匹配的到
如:’ ^haohaowang.top’ 可以匹配”haohaowang.top”但不能匹配 “www.haohaowang.top” 。

$匹配输入字符串的结束位置。如果设置了RegExp 对象的 Multiline 属性,$ 也匹配 ‘\n’ 或 ‘\r’ 之前的位置。对比匹配开始记忆。

3.* + ? {n} {n,} {n,m} ?

* 匹配前面的子表达式零次或多次。例如,’hao‘ 能匹配 “ha” 以及 “haoo”。(星号,bug没展示™的) 等价于”{0,}”。
+
匹配前面的子表达式一次或多次。例如,’zo+’ 能匹配 “zo” 以及 “zoo”,但不能匹配 “z”。+ 等价于 {1,}。

?
匹配前面的子表达式零次或一次。例如,”do(es)?” 可以匹配 “do” 或 “does” 。? 等价于 {0,1}。

{n}
n 是一个非负整数。匹配确定的 n 次。例如,’o{2}’ 不能匹配 “Bob” 中的 ‘o’,但是能匹配 “food” 中的两个 o。

{n,}
n 是一个非负整数。至少匹配n 次。例如,’o{2,}’ 不能匹配 “Bob” 中的 ‘o’,但能匹配 “foooood” 中的所有 o。’o{1,}’ 等价于 ‘o+’。’o{0,}’ 则等价于 ‘o*’。

{n,m}
m 和 n 均为非负整数,其中n <= m。最少匹配 n 次且最多匹配 m 次。例如,”o{1,3}” 将匹配 “fooooood” 中的前三个 o。’o{0,1}’ 等价于 ‘o?’。请注意在逗号和两个数之间不能有空格。

?
当该字符紧跟在任何一个其他限制符 (*, +, ?, {n}, {n,}, {n,m}) 后面时,匹配模式是非贪婪的。非贪婪模式尽可能少的匹配所搜索的字符串,而默认的贪婪模式则尽可能多的匹配所搜索的字符串。例如,对于字符串 “oooo”,’o+?’ 将匹配单个 “o”,而 ‘o+’ 将匹配所有 ‘o’。
4..(点)
匹配除换行符(\n、\r)之外的任何单个字符。要匹配包括 ‘\n’ 在内的任何字符,请使用像”(.|\n)”的模式。
5.(pattern)
匹配 pattern 并获取这一匹配。所获取的匹配可以从产生的 Matches 集合得到,要匹配圆括号字符,请使用 ‘\(‘ 或 ‘\)’。
这些都是简单的匹配,更多内容可以去点我查看,看过之后就可以写一些常用的正则了
参考文章:最全常用正则表达式大全

高级匹配(先行断言(lookahead)和后行断言(lookbehind)

先举个栗子:
假设我们想匹配www.haohaowang.top中的以t开头o,但是不要包含t的索引位置,可以这样写(?<=t)o

人话怎讲:想要匹配到它,但是我还不要它。
下面的这篇文章详细介绍了,我这里就不再多说,多看两遍就懂了!!!
推荐文章:正则表达式的先行断言(lookahead)和后行断言(lookbehind)

正文到此结束(点击广告是对作者最大的支持)