Используя QRegExp, замените слова в QString.

У меня есть 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, чтобы проверить, есть ли слово в списке, который я объявил. Ребята, вы можете мне помочь?

заранее спасибо

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
}
}
}
2

Другие решения

Если вы хотите сделать эту работу с 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();
}
1

Я могу помочь вам со следующим кодом:

QString string1 = "a b c d e f g h i j k l m n o p q r s t u v w y z";
QRegExp regExp("(a|e|i|o|u|y)");//letters to be escaped with a backslash, brackets are used to capture the regular expressions in the current string
string1.replace(regExp,"(\\1)");//Puts each letter a, e, i, o, u, y in brackets
//string1=="(a) b c d (e) f g h (i) j k l m n (o) p q r s t (u) v w (y) z"string1 = "a b c d e f g h i j k l m n o p q r s t u v w y z";
QRegExp regExp2("a|e|i|o|u|y");
string1.replace(regExp2,"(\\1)");//Replace each letter a, e, i, o, u, y by the string (\1)
//string1=="(\1) b c d (\1) f g h (\1) j k l m n (\1) p q r s t (\1) v w (\1) z"

В твоем случае:

QString reserved = "command1,command2,command3";
QString copyOfReserved = reserved;
copyOfReserved.replace(",","|");
//copyOfReserved == "command1|command2|command3"copyOfReserved = "\\b("+copyOfReserved+")\\b");
//copyOfReserved == "\b(command1|command2|command3)\b"QString a = "\\command1 \\command2command1 \\command3 command2 sometext";
QString b = a;
b.replace(QRegExp("\\\\(" + copyOfReserved + ")"),"<input com=\"\\1\"></input>");
//b == "<input com="command1"></input> \command2command1 <input com="command3"></input> command2 sometext"

Я надеюсь, что помог тебе.

1
По вопросам рекламы [email protected]