我正在使用QString
替换QRegularExpression
,但我遇到了转义令牌的问题。
例如:字符串中的"{aaa}"
应替换为"bbb"
,但应忽略"\{aaa}"
并设置"{aaa}"
(不"\"
1}})。
例如:
这是一项名为{aaa}的测试 - >这是一个名为bbb的测试 这是一个名为\ {aaa} - >的测试这是一个名为{aaa}
的测试
我正在使用
QString& replace(const QRegularExpression& re, const QString& after);
但是我找不到跳过转义匹配的方法。我猜是negative look-behind
,但是怎么样?
答案 0 :(得分:1)
您提出的模式 - (?<!\\){aaa}
- 与有效的转义反斜杠{aaa}
之前的有效\\{aaa}
不匹配,请参阅this demo。
你需要的是一个正则表达式,它将解释这些转义的反斜杠:
(?<!\\)(?:\\{2})*\K{aaa}
请参阅regex demo。
<强>详情:
(?<!\\)
- 如果当前位置左侧有\
,则会出现负面的背后失败(?:\\{2})*
- 出现零次或多次双反斜杠\K
- 匹配重置运算符,丢弃目前为止匹配的文本{aaa}
- 文字{aaa}
子字符串。在Qt中,字符串文字可能包含转义序列,\n
用于换行,\r
用于回车等。要定义文字反斜杠(使用的)要形成 regex转义,正则表达式运算符,速记字符类),你需要加倍反斜杠:
QRegularExpression re("(?<!\\\\)(?:\\\\{2})*\\K{aaa}")
答案 1 :(得分:0)
我找到了解决方案:
QRegularExpression re(QString("(?<!\\\\)({aaa})")
我只是错过了匹配反斜杠,必须使用4。