Одна вещь, которую вы можете использовать, чтобы получить индексы «Пуск» и «конец» с IndexOf() и просто использовать:
QString x = "start some text here end";
QString s = "start";
QString e = "end"
int start = x.indexOf(s, 0, Qt::CaseInsensitive); // returns the first encounter of the string
int end = x.indexOf(e, Qt::CaseInsensitive); // returns 21
if(start != -1) // we found it
QString y = x.mid(start + s.length(), end);
или midRef, если вы не хотите, чтобы создать новый список , Возможно, вам придется обрабатывать «конец», иначе вы можете перейти от 0 до -1, что ничего не вернет. Возможно (end> start? End: start)
Редактировать: Nevermind. Если end == -1, это означает, что он вернет все до конца (по умолчанию второй параметр равен -1). Если вы этого не хотите, вы можете пойти с моим примером и использовать какой-то if-statement при выборе «end»
Редактировать: Заметил, что я пропустил прочтение документа, и это будет определено. work:
Это производит следующие изменения. Последние два числа означают, что «начало» заканчивается и начинается «конец».
х = "начать некоторый текст здесь конец" => "текст здесь" 5 16
х = "некоторый текст здесь конец" => нет outprint
х = «старт старт тестирования некоторый текст здесь конец»=>„начать текст здесь“13 22
х =„тестирование начать начать некоторый текст здесь“=>„начать текст здесь“13 -14
Или вы можете сделать это используя regEx. Написал очень простой фрагмент кода здесь для вас:
#include <QDebug>
#include <QRegExp>
int main(int argc, char *argv[]) {
QRegExp rxlen("(start)(.*(?=$|end))");
rxlen.setMinimal(true); // it's lazy which means that if it finds "end" it stops and not trying to find "$" which is the end of the string
int pos = rxlen.indexIn("test start testing some text start here fdsfdsfdsend test ");
if (pos > -1) { // if the string matched, which means that "start" will be in it, followed by a string
qDebug() << rxlen.cap(2); // " testing some text start here fdsfdsfds"
}
}
Это работает, даже если вы сделали есть «конец» в конце концов, то он просто разобрать до конца строки. Наслаждайтесь!
THX для ответа. http://qt-project.org/doc/qt-4.8/qstring.html#mid У меня просто проблема с «концом», потому что в документальном фильме написано, что второй аргумент (n -> в вашем примере «end») - количество возвращаемых символов, начинающихся с первого аргумента «start + s.length()». Поэтому, если ваш первый аргумент - это начальная позиция/индекс, который является ок, второй будет числом символов строки, равной индексу/позиции «end». Не могли бы вы рассказать мне, как исправить проблему с концом? В противном случае действительно прекрасная идея с приветствием «s.length()» – Streight
Хорошо, если я прав для второго аргумента, «end - (start + s.length)» должен работать. я проверю это, когда у меня будет время в следующие дни, и после этого примите ваш ответ, если он будет работать. – Streight
Привет, извините за это. прочитайте мою измененную версию. Также протестировали его и предоставили вам выход – chikuba