gpt4 book ai didi

c++ - 为什么这个正则表达式不适用于 c++ TR1?

转载 作者:搜寻专家 更新时间:2023-10-31 01:16:22 25 4
gpt4 key购买 nike

我承认我已经有一段时间没有使用 C++ 了,但据我所知,我的代码应该可以工作。我正在尝试从包含代码的文件中替换/删除所有 block 注释。我将要搜索的整个文件放入一个字符串中,该字符串包含换行符。

这是我的代码

std::tr1::regex rx1("[/][*][\S\s]*?[*][/]");
stringName = std::regex_replace(stringName, rx1, std::string(""));

据我所知,这应该匹配/*这里的任何内容,包括新行 */

我什至在 http://gskinner.com/RegExr/ 上测试过它,它完美匹配 block 评论。问题是, block 注释没有被替换。这是某种特定于 TR1 的错误吗?

最佳答案

您必须考虑到您正在做的事情有多个层次。

  • 首先,您要在字符串文字中构建一个字符串。对于人类来说,它看起来像一个正则表达式,但字符串文字并不重要。

    除其他外,该字符串文字包含 \S\s 分别产生的特殊字符(就像 \n 是特殊的)。

  • 然后,您将这个字符串(包括特殊字符和所有字符)传递给正则表达式引擎。

相反,您确实需要对反斜杠进行转义,仅针对字符串文字:

std::tr1::regex rx1("[/][*][\\S\\s]*?[*][/]")

然后正则表达式引擎将正确地看到表达式:

[/][*][\S\s]*?[*][/]

另外,我会检查 tr1 的引擎是否需要定界符。它们通常是个好主意。

关于c++ - 为什么这个正则表达式不适用于 c++ TR1?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9134682/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com