使用QRegExp从QString中删除表达式

时间:2018-05-29 10:43:43

标签: c++ regex qt

我在使用QRegExp从QString中删除表达式时遇到问题。我尝试了无数的正则表达无济于事。我做错了什么?

示例文本(QString myString)在此实例中,myString包含“\ u0006 \ u0007 \ u0013Hello”。

myString.remove(QRegExp("\\[u][0-9]{4}"));

它不会删除\ uXXXX的任何实例,其中X =数字。

然而,当我具体如:

myString.remove("\u0006");

确实删除了它。

1 个答案:

答案 0 :(得分:0)

字符串文字并不总是与字符序列

相同
for (char c : "\u0006\u0007\u0013Hello".toCharArray()) {
    System.out.println( c + " (" + (int)c + ")" );
}
System.out.println( "--------------" );
for (char c : "\\u0006\\u0007\\u0013Hello".toCharArray()) {
    System.out.println( c + " (" + (int)c + ")" );
}

在第一个示例中,\u0006正在编码unicode代码点,而在第二个示例中,字符串实际上包含反斜杠。 字符串文字只存在于编译时,在运行时它们是字符序列。 正则表达式正在处理字符序列而不是字符串,而且间隙也有特殊含义,需要进行转义。

另请注意,\u0041是另一种编码A的方法。

也许您正在寻找的是unicode类别,也许以下可以提供帮助:

string.replaceAll( "\\p{Cc}", "" )
相关问题