あなたが使用できることの一つは、(の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まで行くかもしれません。たぶん(終了>開始?終了:開始)
編集:Nevermind。終了== -1の場合は、終了まですべてを返します(デフォルトでは2番目のパラメータは-1)。これを望んでいない場合は、代わりに私の例を使用して、 "終了"を選択するときにif文を使用することができます。
編集:私はドキュメントを見落としてしまいました。仕事:
#include <QDebug>
int main(int argc, char *argv[]) {
QString x = "start some text here end";
QString s = "start";
QString e = "end";
int start = x.indexOf(s, 0, Qt::CaseInsensitive);
int end = x.indexOf(e, Qt::CaseInsensitive);
if(start != -1){ // we found it
QString y = x.mid(start + s.length(), ((end - (start + s.length())) > -1 ? (end - (start + s.length())) : -1)); // if you dont wanna pass in a number less than -1
or
QString y = x.mid(start + s.length(), (end - (start + s.length()))); // should not be any issues passing in a number less than -1, still works
qDebug() << y << (start + s.length()) << (end - (start + s.length()));
}
}
これは、以下のresoultsを生成します。最後の2つの数字は、「開始」が終了し、「終了」が始まるところです。
X = "終了いくつかのテキストをここに" 5 16
X = => "ここにいくつかのテキストを" "終了ここにいくつかのテキストを開始" =>なしoutprint
X =「テスト開始開始いくつかのテキストはここで終わり」=> 『ここにいくつかのテキストを開始する』 13 22
X = 『テストはここにいくつかのテキストを開始する』 => 『ここにいくつかのテキストを開始開始』 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私はちょうど "終わり"に問題があります。なぜなら、ドキュメンタリーでは、2番目の引数(あなたの例ではn - > "end")は、最初の引数 "start + s.length()"から返される文字数です。したがって、最初の引数が開始位置/インデックス(ok)の場合、2番目の文字列は "end"のインデックス/位置に等しい文字列の文字数になります。問題を最終的に解決する方法を教えてください。そうでなければ、 "s.length()" greetingを使って本当に良いアイデアを考えてみてください。 – Streight
私は第2引数 "end - (start + s.length)"が正しくなければなりません。私は次の日の時間があるときにそれをテストし、それがうまくいくならあなたの答えを受け入れます。 – Streight
こんにちは、すみません。私の編集版を読んでください。また、それをテストし、助けのための出力 – chikuba