为什么这个正则表达式不匹配?

时间:2013-09-19 16:19:12

标签: c++ regex qt

#include <QRegExp>
#include <QDebug>

int main()
{
    QRegExp rx("(.*)[^\\]\\[\\d+\\]$");

    qDebug() << rx.indexIn("AA[45]");
    qDebug() << rx.cap(1);
}

我需要编写QRegExp以匹配'['符号前面的名称,如果它没有'\'前面。在这种情况下,它应该打印“AA”,但它什么都不打印。在[^ \\]部分中添加2个斜杠后,它仅匹配"AA\\[45]"的“A”,但对于这种情况,我需要它来匹配任何内容。

#include <QRegExp>
#include <QDebug>

int main()
{
    QRegExp rx("(.*)[^\\\\]\\[\\d+\\]$");

    qDebug() << rx.indexIn("AA\[45]");
    qDebug() << rx.cap(1);
}

此案例不应与任何内容匹配,但会打印“A”。

2 个答案:

答案 0 :(得分:0)

#include <QRegExp>
#include <QDebug>

int main()
{
    QRegExp rx("(.*[^\\\\])\\[\\d+\\]$");

    qDebug() << rx.indexIn("eeeA\\[45]");
    qDebug() << rx.indexIn("eeeA[45]");
}

我在你的帮助下得到它。这就是我需要的。

答案 1 :(得分:0)

此正则表达式仅在您的字母后面跟[

之前的\时才匹配
([^\\]*(?!^\\))\[\d+\]$