为什么我需要在C ++正则表达式中编写\\ d而不是\ d?

时间:2017-11-05 09:43:55

标签: regex

我开始学习正则表达式,我用c ++编写代码 我的任务是:实现一个用function getByPermalinks (permalinks, callback) { var template = 'select video_digests.*, permalinks.redirect' + 'FROM video_digests ' + 'RIGHT JOIN permalinks on permalinks.internal_id = video_digests.media_key WHERE permalinks.permalink in (?)'; db.query( template, [permalinks], onGotVideos.bind(exports, callback) ); 字符替换给定字符串中每个数字的函数。

对于我的示例,'@'字符串= input

我知道我需要使用"12 points"来匹配数字。我试着用这个:\d 但它不起作用:std::regex_replace(input,std::regex("\d"),"@");仍然是output;

然后我搜索了互联网,结果是: "12 points" std::regex_replace(input,std::regex("\\d"),"@");output

任何人都可以帮我理解"@@ points"是什么吗?

2 个答案:

答案 0 :(得分:0)

在C ++应用程序中使用“\ d”时,\是C ++中的转义字符。因此它不会将以下d视为d。

然后正则表达式获取一个字符串,其中没有\ d,但很可能是一个空字符串(因为据我所知,\ d不会在C ++中评估任何内容)。

当你使用“\ d”时,你正在逃避。所以C ++按照你的意图将字符串读作“\ d”。

当您使用转义字符时,您希望输出引号的示例。 “\”“会输出一个双引号。

答案 1 :(得分:0)

\d表示十进制,但是,在正则表达式中,\是一个特殊字符,需要自行转义,因此在\\d中你逃脱了\将其标记为常规字符而非其特殊含义。