これらのURL文字列があります
file:///home/we/Pictures/neededWord/3193_n.jpg
file:///home/smes/Pictures/neededWord/jds_22.png
file:///home/seede/kkske/Pictures/neededWord/3193_n.jpg
それらのそれぞれから「neededWord」を抽出したい。それらから見えるように、画像の名前は常に「neededWord」の後にあり、文字列の変更部分は「neededWord」の前にあります。私が考えた方法は、「/」セパレータfrom rightを使用して文字列を分割し、結果のQstringListの2番目の要素を取得することです。では、右から分割する方法、またはそれを行うより良い方法はありますか?
さて、最後から2番目の要素を使用します。
QStringList pieces = url.split( "/" );
QString neededWord = pieces.value( pieces.length() - 2 );
または、正規表現を使用できます。
または私の頭の上からこのようなもの(テストされていない):
QString neededWord = "";
QString str = "file:///home/seede/kkske/Pictures/neededWord/3193_n.jpg";
QRegExp rx(".*Pictures\\/(\\w+)\\/.*(?:jpg|png|gif|bmp|tiff)");
rx.setMinimal(false);
rx.setCaseSensitivity(Qt::CaseSensitive) // or use Qt::CaseInsensitive
if (rx.indexIn(str) != -1) {
neededWord = rx.cap(1);
}
「neededWord」はneededWord QStringにあるべきです。正規表現パターンは洗練され、よりエレガントな方法で記述できますが、非常に便利な場合でも、それらを記述するのは嫌です!
このように修正しました:
QStringList splitted = info.url().prettyUrl().split("/"); *header = splitted.at(splitted.findIndex(splitted.last()) - 1);
私は QString::lastIndexOf()
を QString::mid()
と一緒に使用して、不要なQString/QStringListの作成と破棄を防ぎます。
// Example:
// 0 1 2 3 4 5
// 012345678901234567890123456789012345678901234567890
// "file:///home/we/Pictures/neededWord/3193_n.jpg"
QString neededWord;
int const lastSlash = url.lastIndexOf('/'); // := 35
int const prevSlash = url.lastIndexOf('/', -lastSlash - 1); // := 24
if(lastSlash > prevSlash + 1 && prevSlash >= 0) {
neededWord = url.mid(prevSlash, lastSlash - prevSlash - 1); // len := 10
}
ニーズに応じて、 QStringRef を使用して、これをさらに最適化できます。
QStringRef neededWordRef(&url, prevSlash, lastSlash - prevSlash - 1);