博文精选 初探正则表达式 | 成电小百

Posted 成电小百

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了博文精选 初探正则表达式 | 成电小百相关的知识,希望对你有一定的参考价值。

什么是正则表达式

引用百科的话:

正则表达式(英语:Regular Expression,在代码中常简写为regex、regexp或RE),又称正规表示式、正规表示法、正规表达式、规则表达式、常规表示法,是计算机科学的一个概念。正则表达式使用单个字符串来描述、匹配一系列匹配某个句法规则的字符串。在很多文本编辑器里,正则表达式通常被用来检索、替换那些匹配某个模式的文本。

许多程序设计语言都支持利用正则表达式进行字符串操作。例如,在Perl中就内建了一个功能强大的正则表达式引擎。正则表达式这个概念最初是由Unix中的工具软件(例如sed和grep)普及开的。正则表达式通常缩写成regex,单数有regexp、regex,复数有regexps、regexes、regexen。

引用链接: https://zh.wikipedia.org/wiki/%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F

什么时候使用正则表达式

在有以下需求的时候使用

  • 从文本中找到我们想要的内容。

  • 检测一段文本是否符合设定好的规则

为什么使用正则表达式

正则表达式的本质是一个工具,好的工具能简化我们的思维复杂度和编程复杂度。

使用正则表达式完全是为了简化我们的代码,而不是为了炫技:D

如何使用正则表达式

例子1

例如我们想要修改某个配置文件,配置参数为 啥post啥size 的

我们用vim打开配置文件,输入

/\w*size\w*

【博文精选】 初探正则表达式 | 成电小百

然后回车,按n查找下一个,就能很快找到那一行了,原来我们要找的是postmaxsize。

例子2

检测上传的文件的文件名

我们想要jpg,png,gif

img0912.jpg
updated_img0912.png
favicon.gif

所以以下文件名应该被过滤

.bash_profile
workspace.doc
documentation.html
img0912.jpg.tmp
access.lock

例子3

正则表达式被很多编程语言支持,在c++中也不例外,看一个改编自《c++ primer》的示例

#include <bits/stdc++.h>

int main()
{
    std::string s("[[:alpha:]]*[^c]ei[[:alpha:]]*");
    std::regex r(s);
    std::smatch m;
    std::string d("receipt freind theif receive");

    if (std::regex_search(d,m,r))
        std::cout<<m.str()<<std::endl;
}

//output: freind

如何学习使用正则表达式

学习正则表达式的最好方法是实践,所以这里推荐一些网站和工具。

https://regex101.com/ in javascript, Python, PCRE 16-bit, generates explanation of pattern

https://www.debuggex.com/ 正则验证测试,清晰明了

https://mengzhuo.org/regex/ 中文版正则验证测试

http://refiddle.com/ 测试工具

http://myregexp.com/ 也是测试工具,都可以试一试

http://regex.alf.nu 闯关模式练习正则表达式,完成一个个正则匹配的测验

http://regexone.com/ 通过实际练习掌握正则表达式

https://regexcrossword.com/ 正则挑战,有不同难度,很丰富

http://callumacrae.github.io/regex-tuesday/ 正则挑战,完成正则匹配要求

https://msdn.microsoft.com/zh-cn/library/az24scfc.aspx MSDN 微软出品

当然学习资料不只有这些,需要善用搜索引擎来发现。


以上是关于博文精选 初探正则表达式 | 成电小百的主要内容,如果未能解决你的问题,请参考以下文章

爬虫初探正则表达式

正则表达式初探

初探正则表达式

java之正则表达式精选

python3爬虫初探之正则表达式

前端学习必备精选文章60篇:JS正则表达式markdown语法前端面试