C++ Can';我找不到任何解释QRegularExpression行为的方法。它是有效的,但不应该';T

C++ Can';我找不到任何解释QRegularExpression行为的方法。它是有效的,但不应该';T,c++,qt,qregularexpression,C++,Qt,Qregularexpression,正如问题所暗示的,我有一个代码片段,带有QRegularExpression,它可以工作。 它做它应该做的事情,没有错误,一切都很好 为什么我要发布这个问题?到目前为止,我发现的一切都暗示我的表达不应该起作用,但是。。。。。是的 我问题的要点在于\-逃逸系统 我知道它还没有定义。在编译过程中,我得到 警告:未知转义序列:'\-'。这一警告实际上是意料之中的 现在考虑下面的代码片段。不要太注意表达方式, 这是俄语,但不幸的是,我注意到这个表情上有一个奇怪的东西 我没有发布任何其他内容,因为它听起来

正如问题所暗示的,我有一个代码片段,带有QRegularExpression,它可以工作。 它做它应该做的事情,没有错误,一切都很好

为什么我要发布这个问题?到目前为止,我发现的一切都暗示我的表达不应该起作用,但是。。。。。是的

我问题的要点在于
\-
逃逸系统

我知道它还没有定义。在编译过程中,我得到
警告:未知转义序列:'\-'
。这一警告实际上是意料之中的

现在考虑下面的代码片段。不要太注意表达方式, 这是俄语,但不幸的是,我注意到这个表情上有一个奇怪的东西

我没有发布任何其他内容,因为它听起来很有味道——它可以按需要工作

考虑到我得到了警告,我真的想知道为什么

表达式如下

//Capture russian endings
QRegularExpression RU_ENDINGS("([а-я\-]+[бвгджзклмнпрстфхчцшщ])([еиоы][й]|[аия][я]|[иую][ю]|[еиоы][е]|[аоеиы][м][иу]|[ое][г][о]|(?<!ост)и?[аеиоыя]м|ост[а-яё]{1,3}|(?<!остиям)(?>и|ь.?)|[ао]в|н[аеио]|с[ая]|[ео][вк]|[иы]х|[ие]ну|[иуя]т|(?<![аеёиоуыэюя]{2})[аеёоуыэюя]+|и{2})$", QRegularExpression::UseUnicodePropertiesOption | QRegularExpression::MultilineOption);
//捕捉俄语结尾

这一时期的经济压力是俄罗斯的最终结果(“(([[[[[[[[[[[[[[[[[[\\\\\\\\\\107---?))))))将将将将这一次次次次次次次次次次次次次次次次次次的经济经济压力的货币货币货币化将将将将对对对这种这种这种压力的结果的结果的结果的使用使用使用使用使用使用使用的结果的结果的压力是对对对对对这种这种这种结果的结果的结果的结果的压制压制压制的结果的结果(“(“(“(“(“(“(“(“(“监管监管监管监管监管监管监管整整整整整整整整整整整整整整整[][||][||]|(?编译器不知道转义序列
\-
。因此它只在字符串中放入一个简单的
-
,并发出警告

因此,您的正则表达式引擎可以看到
[а-а-]
。正则表达式字符组的工作方式是,位于组的最末端的
-
并不特殊,即
[а-а\-]
[а-а-]
之间没有区别

因此,表达式可以按您所希望的方式工作

你可以通过制作一个比较这两个表达式结果的小程序来自己尝试一下

QRegularExpression escaped("[a-z\\-]");
QRegularExpression bad_escaped("[a-z\-]");
QRegularExpression unescaped("[a-z-]");

将这三个字符串与几个测试字符串匹配,特别是字符串 > ->代码>,你会发现它们都是相同的。当然除了编译器警告。

你可能打算写<代码> \<代码>而不是<代码> \/COD>。第一个逃逸由C++编译器(因此警告)来评估。第二个是
QRegularExpression
no。我指的是我的意思。它确实有效。这有点奇怪。我知道它应该是
\-
。问题是-为什么有效=)。在这种情况下,它是实现定义的。我猜您正在使用的编译器将其视为
\-
,我有理由相信其他方面-主要是因为我有一个
\\1y
。但可能我理解了所有我读错的内容。据我所知,
\\1y
的计算结果为
\1y
。这是从replacemEnter Poice对于这样的正则表达式,你应该考虑(C++ 11)。噢,该死。我没有想到这个。考虑到这一点,我真的应该把<代码> \/Cord>。我想对未来的正则表达式做得更好。最好不要忘记正确地逃脱一切。