正则表达式 看完这些就够了

本文深入介绍了正则表达式,包括Perl正则的基本字符、贪婪与非贪婪模式、回溯匹配、反向引用等。同时,详细讨论了boost::regex和std::regex在C++中的使用,以及两者之间的性能比较。此外,还推荐了多种正则表达式在线工具,帮助开发者更好地理解和应用正则。
摘要由CSDN通过智能技术生成

又好久没写文章了,最近攒了几个话题,还没来得及写,在年末的最后一天,还是要写一篇,跨年啦~一篇文章写到2020年。不抛弃不放弃,过几年再看看现在写的,就如同我现在看之前写的。还有就是刚刚研究了一下如何做个标题党,来了一个(哈哈)。废话不多说,开始正题。

我们都会或多或是的用到过正则匹配,大家真的清楚用的是哪种正则吗?各种语言的正则又有哪些异同呢?


目录

1  各种各样的正则表达式

2  boost::regex 的简单介绍

2.1 Perl 正则表达式

2.1.1  基本字符含义

2.1.2  [贪婪模式] 和 [非贪婪模式]

2.1.3 [阻止回溯匹配(Possessive repeats)] 

2.1.4 [反向引用(回引 back references)]

2.1.5  [替换 alternation]

2.1.6  [字符集合]

2.1.7  [取反]

2.1.8  [字符类]

2.1.9 [单词边界]

2.2 POSIX extended 正则表达式

2.3 POSIX Basic 正则表达式

2.4 boost 正则操作主要使用的接口

3  std::regex 的简单介绍

4 boost::regex 和 std::regex 的性能对比

5 谈谈其他语言的 regex

6 正则表达式工具

6.1 正则表达式在线分析工具regexper

6.2 perl在线正则测试工具

6.3  正则表达式在线测试工具

6.4  各种语言正则的写法工具


1  各种各样的正则表达式

翻看boost, cplusplus的官方文档可以看出来,主要有三种正则表达式:基本的正则表达式(Basic RegEx),扩展的正则表达式(Extended RegEx),Perl正则表达式(Perl RegEx).
 
图 1  boost 库中主要支持的三种正则表达式。boost::regex 默认使用的是 Perl 正则表达式。
 
图2  c++标准库中主要支持的正则表达式。std::regex 默认使用使用的是 ECMAScript 正则表达式(后面再来讲讲ECMAScript是什么)。
 
 

2  boost::regex 的简单介绍

boost::regex e1(my_expression); 默认设置的式boost::regex::perl,perl 和其他正则类型比较起来支持的内容更多,兼容性也就更好。
 

2.1 Perl 正则表达式

2.1.1  基本字符含义

除了下面的字符以外,其他字符都和自己匹配,
. [ { } ( ) \ * + ? | ^ $
 
.  表示任意一个字符
^ 匹配开头字符
$ 匹配结尾字符
() 子表达式,可以把子表达式作为一个单元进行正则处理。
这里有个副作用,在结果中会有匹配子串的字段,小括号里面用 ?:  可以屏蔽捕获。例如(?:ab)+ 
 
*匹配前面的原子(preceding atom)0次或多次
+匹配前面的原子(preceding atom)1次或多次
?匹配前面的原子(preceding atom)0次或1次
 
a{n} 匹配a字符n次
a{n,} 匹配a字符n次或更多次
a{n, m} 匹配a字符n到m次
 

2.1.2  [贪婪模式] 和 [非贪婪模式]

贪婪模式会尽可能多的匹配,如 字符串abcdc, 正则a*c,会匹配到abcdc,而非贪婪匹配结果为abc,匹配到结果就好,不需要匹配的那么多。非贪婪模式需要添加 ?表示,如a*?c.
*?表示匹配前面的原子0次或多次,最短匹配
+?表示匹配前面的原子1次或多次,最短匹配
??表示匹配前面的原子0次或1次,最短匹配
{n,}? 匹配前面的原子n次或多次,最短匹配
{n, m}? 匹配n到m次,最短匹配
 

2.1.3 [阻止回溯匹配(Possessive repeats)] 

默认
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值