正则表达式教程:实例速查

本文为 AI 研习社编译的技术博客,原标题 :

Regex tutorial — A quick cheatsheet by examples

翻译 | kerr、狒狒 校对 | 就2 整理 | 就2

https://medium.com/factory-mind/regex-tutorial-a-simple-cheatsheet-by-examples-649dc1c3f285

正则表达式(regex 或 regexp)在文本信息提取方面是非常有用的工具,通过查询一个或多个特定搜索模式的匹配实现(例如,特定的ASCII或unicode字符序列)。

正则表达式的应用领域包括字符串语义分析/替换,到数据格式转换,以及网页抓取等。

最有趣的一点是,只要学过正则表达式的语法,在目前几乎所有编程语言中都可以应用正则表达式(JavaScript、Java、VB、C/C++、C#、Python、Perl、Ruby、Delphi、R、Tcl、以及其他很多语言),这些语言对一些高级功能和语法的支持只有细微的区别。

下面通过一些示例和解释来了解正则表达式。

Basic topics

Anchors — ^ and $

^The matches any string that starts with The -> Try it!end$ matches a string that ends with end

^The end$ exact string match (starts and ends with The end)

roar matches any string that has the text roar in it

数量词 —* + ? and{}

或运算符——|或[]

字符类——\d \w \s和.

谨慎使用“.” 运算符,因为通常类或反义字符类(我们将在下面介绍)会更快更精确。

\ d,\ w和\ s也分别用\ D,\ W和\ S表示它们的否定。

例如,\ D将执行与\ d获得的相反匹配。

为了按字面意思理解,你必须使用反斜杠“\”来转义字符^.[$()|*+?{\,因为它们具有特殊含义。

请注意,您还可以匹配不可打印的字符,如制表符\ t,换行符\ n,回车符\ r。

标志位

基础部分中,如何构建一个正则表达式还有一个基本概念:标志。

正则表达式通常以这种形式/abc /出现,其中搜索模式由两个斜杠字符/分隔。

我们可以指定一个带有这些值的标志(我们也可以将它们相互组合):

g(全局)在第一次匹配后不返回,从上一次匹配结束时重新开始后续搜索

m(多行)启用时,^和$将匹配这行的开头和结尾,而不是整个字符串。

i(不敏感)使整个表达式不区分大小写(例如/ aBc / i将匹配AbC)。

中心主题

分组和捕获——()

当我们需要使用您首选的编程语言从字符串或数据中提取信息时,此运算符非常有用。由几个组捕获的任何多次出现都将以经典数组的形式公开:我们将使用匹配结果的索引来访问它们的值。

如果我们选择为组添加名称(使用(?...)),我们将能够使用匹配结果检索组值,就像字典一样,其中键将是每个组的名称。

括号表达式——[]

请记住,在括号内的表达式中,所有特殊字符(包括反斜杠\)都会失去其特殊权力:因此我们不会应用“转义规则”。

贪婪与惰性匹配

量词(* + {} )是贪婪的运算符,因此它们通过提供的文本尽可能地扩展匹配。

例如,匹配This is a

simple div

test中的

simple div

为了只捕获div标签,我们可以使用? 让它变得懒惰:

请注意,更好的解决方案应该避免使用.来支持更严格的正则表达式:

高级主题

边界— \b and \B

\b表示像插入符号(它类似于$和^)的匹配位置,其中一侧是单词字符(如\w)而另一侧不是单词字符(例如,它可能是字符串的开头或者空格字符)。

它伴随着它的否定,\B。这匹配\b不匹配的所有位置,如果我们想要找到完全被单词字符包围的搜索模式,则可以匹配。

回溯引用——\1

先行和后行断言——(?=)和(?

你也可以使用否定运算符!

总结

正如您所看到的,正则表达式的应用程序字段可以是多个的,我确信您在开发人员职业生涯中看到的任务中至少识别出这些任务中的一个,这里是一个快速列表:

数据验证(例如检查时间字符串是否格式正确)

数据抓取(特别是网页抓取,最终按特定顺序查找包含特定单词集的所有页面)

数据转换(将数据从“原始”转换为另一种格式)

字符串解析(例如捕获所有URL的GET参数,捕获一组括号内的文本)

字符串替换(即使在使用通用IDE的代码会话期间,例如在相应的JSON对象中转换Java或C#类 - 将“;”替换为“,”将其设为小写,避免类型声明等)

语法高亮,文件重命名,数据包嗅探和许多其他涉及字符串的应用程序(其中数据不必是文本)

如果你喜欢的话,不要忘了推荐这篇文章。

不久我将出版一份包含常见正则表达式列表的新文章,敬请关注!

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20181008A1P4WO00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券