【问题标题】:Escape regex special characters for tr1::regex为 tr1::regex 转义正则表达式特殊字符
【发布时间】:2013-03-20 12:18:13
【问题描述】:

我需要在我的正则表达式中嵌入用户输入,因此需要对任何正则表达式特殊字符进行转义,而且我事先不知道字符串是什么。 p>

应该是这样的

string pattern = "\\d+ " + myEscapeFunction(userData);

我需要转义哪些特殊字符?或者有没有和Qt的QRegExp::escape等效的功能?

【问题讨论】:

  • 我不确定是否有通用解决方案,因为它取决于表达标准。例如 (AFAIR) 一些引擎需要 ] 被转义,而有些则没有。您应该查看标准的转义字符串规则并进行一些字符串替换...
  • 似乎是这样。现在想想,tr1::regex 允许在运行时设置表达式标准。我认为它默认为 ECMAscript。

标签: c++ regex tr1


【解决方案1】:

您必须转义的字符列表取决于您使用的各种正则表达式语法中的哪一种。如果您使用默认的ECMAScript,看起来QRegExp::escape 文档中的列表是一个不错的起点。它说:

特殊字符有$、(,)、*、+、.、?、[、,]、^、{、|和}。

由于某种原因,该列表忽略了\

但比这稍微复杂一些,因为在方括号内,除了\] 之外没有任何字符是特殊的,并且\] 必须保持不转义。

此外,紧跟在( 之后的? 并不特殊。例如,在(?=x) 中,? 应该被转义。

我想差不多就是这样,但我没有花足够的时间来确定。

【讨论】:

    猜你喜欢
    • 2013-12-28
    • 1970-01-01
    • 2011-11-17
    • 2013-02-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多