四时宝库

程序员的知识宝库

正则表达式使用

正则表达式是文本搜索的一个利器,掌握它定会提高你的工作效率。

要使用正则表达式就必须知道有哪些元字符以及它们所代表的意义,这里我就不再对每个元字符做说明了,假设你已经了解了这些知识,如果还不了解可以参考网上的一些资料。

以下所有示例用的是一个在线的正则表达式测试工具来验证的,地址是
https://tool.oschina.net/regex/

1、匹配指定数量字符

比如11位的手机号:[0-9]{11},匹配结果如下图:

大括号里的数字表示重复前面匹配的数量,有以下几种写法

  1. {k} 表示重复次数k
  2. {m,} 表示重复次数不小于m
  3. {,n} 表示重复次数不大于n
  4. {m,n} 表示重复次数不小于m且不大于n

我用的这个测试工具不支持上面四种所有写法,只支持1,2,4这三种写法

2、匹配至少1个字符

比如匹配数字与字母相互交叉文本中的所有字母部分:[a-zA-Z]+,匹配结果如下图:

这种写法与[a-zA-Z]{1,}等效,得到同样结果,如下图所示:

还有一个可以表示匹配数量的元字符是*,不过它表示大于等于0个匹配,也就是说以下这种写法[a-zA-Z][a-zA-Z]* 也与 [a-zA-Z]+ 是等效的,得到同样结果,如下图所示:

3、匹配另一个正则表达式结果指定数量的文本

这种匹配其实与前两种写法上没有多大区别,唯一的区别就是需要重复的文本不再是单个字符,而是其它正则表达式匹配的结果,比如匹配ip地址:([0-9]{1,3}\.){3}[0-9]{1,3},匹配结果如下图:

4、引用前一个正则表达式匹配结果

通过\n的方式可以引用第n个分组,比如查找不相邻的两个重复的单词:([a-zA-z]{5,}).+\1,匹配结果如下图:

5、匹配开头是指定字符的文本

比如匹配开头是数字的文本:^[0-9]+,匹配结果如下图:

6、匹配结尾是指定字符的文本

比如匹配结尾是数字的文本:[0-9]+$,匹配结果如下图:

7、前向肯定与否定预匹配

比如搜索后面必须紧跟hello这个单词的数字:[0-9]+(?=hello),匹配结果如下图:

比如搜索后面一定不能紧跟hello这个单词的数字:[0-9]+(?!hello),匹配结果如下图:


8、后向肯定与否定预匹配

比如搜索前面必须是数字的英文单词:(?<=[0-9]+)[a-zA-Z]+,匹配结果如下图:

比如搜索前面一定不是数字的英文单词:(?

发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言
    友情链接