正则表达式 - 请教一个 c++11的 正则语法

查看:102
本文介绍了正则表达式 - 请教一个 c++11的 正则语法的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

R"xxx()xxx": xxx可以被替换成任何字符串,不可以包含括号和双引号,而且你需要保证两边是一样的。如果你这样写,那么括号里面的任何字符都不会被转义,甚至是换行符也没有问题。这种字符串语法用来写正则表达式就特别的方便。

可以详细说下用法吗, 感觉不是很理解.

解决方案

不知道你是不明白R还是不明白xxx,那我就都说说吧

先说R,这是代表Raw String

比如以下文本

 abc
     efg\n

在没有Raw String之前,你要这样写

"abc\n\tefg\\n"

字符串里的特殊符号都要经过转义

但是有了Raw String之后,你可以这样写

R"(abc
    efg\n)"

也就是Raw String括号里面的文本是所见即所得

可能你会奇怪,为什么需要一对括号?

考虑一下文本

abc"efg

如果没有括号,那就会写成R"abc"efg",这样就无法判断哪个是配对的双引号
因此需要引入括号来定界了

引入括号了以后,如果原始文本中有引号+括号呢?
比如

abc)"efg

按上面的写法,就需要写成R"(abc)"efg)",这显然会导致语法错误,无法判断哪个是配对的)"
显然,在文本包含有)"的情况下下,()不足以定界

因此需要自定义delimiter(定界符),就是你题目中的xxx(...)xxx
上面的字符串就可以写成R"xxx(abc)"efg)xxx"
这样编译器就可以分辨出包含在xxx(...)xxx里面的都是原始文本,
当然xxx可以任你自定义,你也可以写成ab(...)ab

这篇关于正则表达式 - 请教一个 c++11的 正则语法的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆