У меня есть 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, чтобы проверить, есть ли слово в списке, который я объявил. Ребята, вы можете мне помочь?
заранее спасибо
Я бы разделил 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
}
}
}
Если вы хотите сделать эту работу с 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();
}
Я могу помочь вам со следующим кодом:
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"
Я надеюсь, что помог тебе.