奇怪的 QRegExp 来识别非 ASCII 字符

Strange QRegExp to Identify non-ASCII Characters

提问人:Don Wakefield 提问时间:8/2/2022 更新时间:8/2/2022 访问量:42

问:

在使用 Qt4.8、C++ 为基于 ASCII 的应用程序开发的遗留代码库中,我看到了以下几行

    const QRegExp lBadCharsRegExp("[^\\x{001F}-\\x{007E}]");

    // if we find a match, our string contains some bad chars
    bool lMatches = xStr.contains(lBadCharsRegExp);

QRegExp 中的字符类很奇怪。看起来作者的目标是一系列十六进制字符,但不需要大括号。此外,如果我传入一个包含每个可打印字符的字符串,它只会拒绝“~”。 如果我这样做

const QRegExp lBadCharsRegExp("[^\\x001F-\\x007E]");

“~”也被接受。 有人可以解释一下吗

  • 第一个 QRegExp 中的奇怪语法
  • 为什么它排除 '~'
C++ ASCII QT4.8

评论

0赞 Samuel Åslund 8/2/2022
我想你对这里的字符编码有一些假设。带有“可打印字符”的字符串包含多少个字符?在这两种情况下,您是否生成完全相同的它?
0赞 Don Wakefield 8/2/2022
@SamuelÅslund,如果您指的是应用程序,我想字符串不会太长。其目的是允许用户在 DSL 中显示任意表达式。但如前所述,该应用程序是基于 ASCII 的,因此代码(我相信)试图防止输入非 ASCII Unicode 字符。我的测试字符串在键盘上有所有可打印的字符,包括“~”。

答: 暂无答案