文件路径中的std :: regex转义反斜杠

尼古拉斯·霍尔特豪斯(Nicolas Holthaus)

我要创建一个std::regex(__FILE__)作为单元测试的一部分的字符串,该单元测试将检查一些异常输出,该异常输出显示文件名。

在Windows上,它失败并显示:

regex_error(error_escape):表达式包含无效的转义字符或尾随转义符。

因为__FILE__宏扩展包含未转义的反斜杠。

有没有比循环遍历结果字符串(即使用std算法或某些std::string函数)更优雅的方式来转义反斜杠

阿德里安·麦卡锡(Adrian McCarthy)

文件路径可以包含许多在正则表达式模式中具有特殊含义的字符。通常情况下,仅转义反斜杠不足以进行强大的检查。

甚至一个简单的路径(如C:\Program Files (x86)\Vendor\Product\app.exe)也包含几个特殊字符。如果要将其转换为正则表达式(或正则表达式的一部分),则不仅需要转义反斜杠,还必须转义括号和句点(点)。

幸运的是,我们可以使用更多的正则表达式解决正则表达式问题:

std::string EscapeForRegularExpression(const std::string &s) {
  static const std::regex metacharacters(R"([\.\^\$\-\+\(\)\[\]\{\}\|\?\*)");
  return std::regex_replace(s, metacharacters, "\\$&");
}

(文件路径不能包含*?,但是我将它们包含在内是为了使该函数具有一般性。)

如果您不遵守“没有原始循环”准则,那么可能更快的实现将避免使用正则表达式:

std::string EscapeForRegularExpression(const std::string &s) {
  static const char metacharacters[] = R"(\.^$-+()[]{}|?*)";
  std::string out;
  out.reserve(s.size());
  for (auto ch : s) {
    if (std::strchr(metacharacters, ch))
      out.push_back('\\');
    out.push_back(ch);
  }
  return out;
}

尽管循环增加了一些混乱,但是这种方法使我们可以降低对的定义的转义metacharacters,这是对正则表达式版本的可读性。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

从ini文件读取路径,反斜杠转义字符消失?

来自分类Dev

字符串中的“转义”反斜杠

来自分类Dev

转义字符串中的反斜杠

来自分类Dev

sed中的转义反斜杠字符

来自分类Dev

JavaCC令牌中的反斜杠转义字符

来自分类Dev

使用反斜杠转义的kickstart文件中的多行条目

来自分类Dev

转义反斜杠在javascript中打印两个反斜杠

来自分类Dev

用JavaScript中的双反斜杠替换单个反斜杠转义

来自分类Dev

用JavaScript中的双反斜杠替换单个反斜杠转义

来自分类Dev

什么是C中的反斜杠百分比转义?

来自分类Dev

从字符串中删除反斜杠(转义符)

来自分类Dev

如何在Python中忽略反斜杠作为转义字符?

来自分类Dev

sed中单引号的反斜杠转义会产生错误

来自分类Dev

javascript中的正则表达式转义反斜杠

来自分类Dev

转义反斜杠在字符串中以“\\”形式出现

来自分类Dev

正则表达式中的转义方括号之前的转义反斜杠问题

来自分类Dev

文件路径开头的反斜杠?

来自分类Dev

perl regex将反斜杠附加到目录路径

来自分类Dev

Git中错误的文件路径-路径包含反斜杠(\)而不是常规斜杠

来自分类Dev

在VIM中,使用斜杠替换路径,而不使用转义斜杠

来自分类Dev

使用Java API生成属性文件时,为什么冒号以反斜杠转义?

来自分类Dev

写入JSON文件时,如何在PathBuf变量中转义反斜杠字符?

来自分类Dev

如何在文件内容替换器teamcity的变量中转义反斜杠

来自分类Dev

MV-如何在文件名中转义反斜杠?

来自分类Dev

写入JSON文件时,如何在PathBuf变量中转义反斜杠字符?

来自分类Dev

如何在文件内容替换器teamcity的变量中转义反斜杠

来自分类Dev

如何使用Maven在已过滤的属性文件中转义反斜杠?

来自分类Dev

JavaScript和Python 2.7中的JSON字符串中的转义反斜杠

来自分类Dev

如何在java中的json对象值中显示反斜杠 - 非法转义JSONException

Related 相关文章

  1. 1

    从ini文件读取路径,反斜杠转义字符消失?

  2. 2

    字符串中的“转义”反斜杠

  3. 3

    转义字符串中的反斜杠

  4. 4

    sed中的转义反斜杠字符

  5. 5

    JavaCC令牌中的反斜杠转义字符

  6. 6

    使用反斜杠转义的kickstart文件中的多行条目

  7. 7

    转义反斜杠在javascript中打印两个反斜杠

  8. 8

    用JavaScript中的双反斜杠替换单个反斜杠转义

  9. 9

    用JavaScript中的双反斜杠替换单个反斜杠转义

  10. 10

    什么是C中的反斜杠百分比转义?

  11. 11

    从字符串中删除反斜杠(转义符)

  12. 12

    如何在Python中忽略反斜杠作为转义字符?

  13. 13

    sed中单引号的反斜杠转义会产生错误

  14. 14

    javascript中的正则表达式转义反斜杠

  15. 15

    转义反斜杠在字符串中以“\\”形式出现

  16. 16

    正则表达式中的转义方括号之前的转义反斜杠问题

  17. 17

    文件路径开头的反斜杠?

  18. 18

    perl regex将反斜杠附加到目录路径

  19. 19

    Git中错误的文件路径-路径包含反斜杠(\)而不是常规斜杠

  20. 20

    在VIM中,使用斜杠替换路径,而不使用转义斜杠

  21. 21

    使用Java API生成属性文件时,为什么冒号以反斜杠转义?

  22. 22

    写入JSON文件时,如何在PathBuf变量中转义反斜杠字符?

  23. 23

    如何在文件内容替换器teamcity的变量中转义反斜杠

  24. 24

    MV-如何在文件名中转义反斜杠?

  25. 25

    写入JSON文件时,如何在PathBuf变量中转义反斜杠字符?

  26. 26

    如何在文件内容替换器teamcity的变量中转义反斜杠

  27. 27

    如何使用Maven在已过滤的属性文件中转义反斜杠?

  28. 28

    JavaScript和Python 2.7中的JSON字符串中的转义反斜杠

  29. 29

    如何在java中的json对象值中显示反斜杠 - 非法转义JSONException

热门标签

归档