我正在使用QString替换QRegularExpression,但转义令牌有问题。
例如:字符串中的"{aaa}"应该替换为"bbb",但是"\{aaa}"应该被忽略,"{aaa}"将被设置(没有"\")。
例:
这是一个名为{aaa} ->的测试,这是一个名为bbb的测试 这是一个名为{aaa} ->的测试,这是一个名为{aaa}的测试。
我在用
QString& replace(const QRegularExpression& re, const QString& after);但我没办法跳过一场逃脱的比赛。我想是消极的,但是怎么做呢?
发布于 2017-05-02 19:34:41
您提出的模式- (?<!\\){aaa} -将与有效转义反斜杠( \\{aaa} )前面的有效{aaa} (参见这个演示 )不匹配。
您需要的是一个正则表达式来解释这些转义反斜杠:
(?<!\\)(?:\\{2})*\K{aaa}见regex演示。
详细信息
(?<!\\) -如果当前位置左侧立即有\,则为失败的负查找。(?:\\{2})* -零或多个双反斜杠的出现\K -匹配重置操作符丢弃到目前为止匹配的文本{aaa} -一个文字{aaa}子字符串。在Qt中,字符串文本可能包含转义序列、换行符的\n、回车等。要定义文字反斜杠(用于形成regex转义、regex运算符、速记字符类),需要将反斜杠加倍:
QRegularExpression re("(?<!\\\\)(?:\\\\{2})*\\K{aaa}")发布于 2017-04-14 11:49:33
我找到了解决办法:
QRegularExpression re(QString("(?<!\\\\)({aaa})")我只是错过了匹配反斜杠,4必须使用。
https://stackoverflow.com/questions/43409192
复制相似问题