为什么以下正则表达式不起作用?

时间:2013-05-26 01:13:21

标签: regex qt4 qregexp

我试图用QRegExp将\\u0061\u0061替换为%u0061

所以我这样做了,

QString a = "\\u0061";
qDebug() << a.replace(QRegExp("\\?\\u"), "%u");

由于斜杠可以出现一次或两次,所以我使用?代表第一个斜杠,但是它无法正常工作,它有什么问题?

修改

感谢Denomales,它应该是\\\\u代表\\u,而我现在正在使用\\\\+u

1 个答案:

答案 0 :(得分:2)

描述

根据QT qregex documentation ,请参阅“字符集的字符和缩写”部分:

  

注意:C ++编译器会转换字符串中的反斜杠。要在正则表达式中包含\,请输入两次,即\\。要匹配反斜杠字符本身,请输入四次,即\\\\

小心一试:

[\\\\]{1,2}(u)

enter image description here

我输入了4个反斜杠,因此各种语言层可以正确地逃避反斜杠。然后将其嵌套在方括号内,并要求它出现1至2次。基本上这应该在字母u之前找到单反斜杠和双反斜杠。然后,您可以在示例中替换为%u

在我的示例中,u字符被捕获,应作为第1组返回,以便稍后用于替换。