正则表达式文法icase nosubs optimize collate ECMAScript basic extended awk grep egrep,分别有什么区别?

文章讲述了正则表达式中的各种选项,如icase(忽略大小写)、nosubs(不显示子表达式)、optimize(优化匹配)和collate(本地化字符范围),以及ECMAScript、basic、extended、awk、grep和egrep等不同文法的选择和使用方法。

常量

效果
icase应当以不考虑大小写进行字符匹配。
nosubs进行匹配时,将所有被标记的子表达式 (expr) 当做非标记的子表达式 (?:expr)。不将匹配存储于提供的 std::regex_match 结构中,且 mark_count() 为零。
optimize指示正则表达式引擎进行更快的匹配,带有令构造变慢的潜在开销。例如这可能表示将非确定有限状态机转换为确定有限状态机。
collate形如 "[a-b]" 的字符范围将对本地环境敏感。
multiline (C++17)如果选择 ECMAScript 引擎,那么指定 ^ 应该匹配行首,而 $ 应该匹配行尾。
ECMAScript使用改 ECMAScript 正则表达式文法
basic使用基本 POSIX 正则表达式文法(文法文档)。
extended使用扩展 POSIX 正则表达式文法(文法文档)。
awk使用 POSIX 中 awk 工具所用的正则表达式文法(文法文档)。
grep使用 POSIX 中 grep 工具所用的正则表达式文法。这等效于 basic 选项附带作为另一种分隔符的换行符 '\n'。
egrep使用 POSIX 中 grep 工具带 -E 选项所用的正则表达式文法。这等效于 extended 附带 '|' 之外的作为另一种分隔符的换行符 '\n'。

最多只能选取 ECMAScriptbasicextendedawkgrep 和 egrep 中的一个文法选项。如果不选取文法选项,那么设定为选取 ECMAScript。其他选项作为修饰符工作,从而

 std::regex("meow", std::regex::icase) 

等价于

 std::regex("meow", std::regex::ECMAScript|std::regex::icase)

  1. icase:这个词语通常出现在正则表达式中,表示忽略大小写。例如,在awk或grep中,可以使用-i选项实现这一点。
  2. nosubs:这个词语通常出现在awk命令中,表示不输出匹配的子串。
  3. optimize:这个词语通常用于描述对代码或算法的优化,以提高其性能或效率。
  4. collate:这个词语通常用于指对文本进行排序或整理的操作。在awk和grep等工具中,可以使用sort命令进行此类操作。
  5. ECMAScript:这是一种用于网页浏览器的脚本语言,通常与HTML和CSS一起使用,由欧洲计算机制造商协会(ECMA)制定和维护。
  6. basic 和 extended:这两个词语通常用于描述正则表达式的特性。basic模式只包含基本的正则表达式元素,而extended模式则包含更多的高级元素和功能。
  7. awk:这是一种用于处理文本数据的命令行工具,具有强大的数据处理和报告生成能力。
  8. grep:这也是一种用于处理文本数据的命令行工具,用于搜索和匹配文本中的特定模式。
  9. egrep:这是增强版的grep,结合了基本正则表达式和扩展正则表达式的功能。

regex库默认使用的ECMAScript文法的表达式
在这里插入图片描述
在这里插入图片描述

如果想要更改为其它文法,只需要在regex构造函数中最后一位填入对应文法即可,例如:

regex r("<.*?>(.*)<.*?>", regex_constants::grep);

当然除了选择文法,还可以选择其它标志,只需要将他们用符号 | 连接起来即可

如忽略大小写匹配可以写为

regex r("<.*?>(.*)<.*?>", regex_constants::grep|regex_constants::icase);

可以看到,其实这些可选项都在regex_constants中,还有其它可选项如下:
在这里插入图片描述
不同文法之间的差异
在这里插入图片描述

还需要注意的是,C++中许多字符需要添加\ 符号进行转义才能使用,过于麻烦,所以C++11之后,出现了如下写法:

R"dem(内容)dem"

使用该写法就可以不再转义即可使用,其中dem为任意字符,但要求前后一致即可,其它为固定写法.

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值