首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >QRegularExpression:跳过匹配转义令牌

QRegularExpression:跳过匹配转义令牌
EN

Stack Overflow用户
提问于 2017-04-14 09:51:33
回答 2查看 459关注 0票数 1

我正在使用QString替换QRegularExpression,但转义令牌有问题。

例如:字符串中的"{aaa}"应该替换为"bbb",但是"\{aaa}"应该被忽略,"{aaa}"将被设置(没有"\")。

例:

这是一个名为{aaa} ->的测试,这是一个名为bbb的测试 这是一个名为{aaa} ->的测试,这是一个名为{aaa}的测试。

我在用

代码语言:javascript
复制
QString& replace(const QRegularExpression& re, const QString& after);

但我没办法跳过一场逃脱的比赛。我想是消极的,但是怎么做呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-05-02 19:34:41

您提出的模式- (?<!\\){aaa} -将与有效转义反斜杠( \\{aaa} )前面的有效{aaa} (参见这个演示 )不匹配。

您需要的是一个正则表达式来解释这些转义反斜杠:

代码语言:javascript
复制
(?<!\\)(?:\\{2})*\K{aaa}

regex演示

详细信息

  • (?<!\\) -如果当前位置左侧立即有\,则为失败的负查找。
  • (?:\\{2})* -零或多个双反斜杠的出现
  • \K -匹配重置操作符丢弃到目前为止匹配的文本
  • {aaa} -一个文字{aaa}子字符串。

在Qt中,字符串文本可能包含转义序列、换行符的\n、回车等。要定义文字反斜杠(用于形成regex转义、regex运算符、速记字符类),需要将反斜杠加倍:

代码语言:javascript
复制
QRegularExpression re("(?<!\\\\)(?:\\\\{2})*\\K{aaa}")
票数 2
EN

Stack Overflow用户

发布于 2017-04-14 11:49:33

我找到了解决办法:

代码语言:javascript
复制
QRegularExpression re(QString("(?<!\\\\)({aaa})")

我只是错过了匹配反斜杠,4必须使用。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43409192

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档