2

我有一个包含保留字列表的 QString。我需要解析另一个字符串,搜索第一个字符串中包含的任何单词,并以 '\' 开头并修改这些单词。

例子:

QString reserved = "command1,command2,command3"

QString a = "\command1 \command2command1 \command3 command2 sometext"

parseString(a, reserved) = "<input com="command1"></input> \command2command1 <input com="command3"></input> command2 sometext"

我知道我必须使用 QRegExp,但是我没有找到如何使用 QRegExp 来检查一个单词是否在我声明的列表中。你们能帮帮我吗?

提前致谢

4

2 回答 2

2

我会将reservedWords列表拆分为QStringList然后迭代每个保留字。然后在字符前面\添加(它需要在 QString 中转义),并使用该indexOf()函数查看输入字符串中是否存在该保留字。

void parseString(QString input, QString reservedWords)
{
    QStringList reservedWordsList = reserved.split(',');
    foreach(QString reservedWord, reservedWordsList)
    {
        reservedWord = "\\" + reservedWord;
        int indexOfReservedWord = input.indexOf(reservedWord);
        if(indexOfReservedWord >= 0)
        {
            // Found match, do processing here
        }
    }
}
于 2013-07-19T17:26:57.460 回答
1

如果你想用 QRegEx 做这个工作,这里是代码:

QString reservedList("command1,command2,command3");

QString str = "\\command1 \\command2command1 \\command3 command2 sometext";

QString regString = reservedList;
regString.prepend("(\\\\");      \\ To match the '\' character
regString.replace(',', "|\\\\");
regString.append(")");           \\ The final regString: (\\\\command1|\\\\command2|\\\\command3)
QRegExp regex(regString);
int pos = 0;

while ((pos = regex.indexIn(str, pos)) != -1) {
    qDebug() << regex.cap(0);
    pos += regex.matchedLength();
}
于 2013-07-22T09:23:07.787 回答