Во-первых, я просто хочу сказать, что я понимаю, что использовать HTML-выражения для использования в качестве регулярных выражений. Я просто использую его, чтобы захватить информацию о тегах <img>
, поэтому мне не важно, что вложенные и т. Д.QRegExp для HTML-тегов изображений
Это, как говорится, я пытаюсь получить URL-адреса src
для всех изображений на веб-странице. Однако, похоже, я получаю только первый результат. Это мое регулярное выражение, или я его использую? Мои навыки регулярного выражения немного ржавые, поэтому я мог бы пропустить что-то очевидное.
QRegExp imgTagRegex("(<img.*>)+", Qt::CaseInsensitive); //Grab the entire <img> tag
imgTagRegex.setMinimal(true);
imgTagRegex.indexIn(pDocument);
QStringList imgTagList = imgTagRegex.capturedTexts();
imgTagList.removeFirst(); //the first is always the total captured text
foreach (QString imgTag, imgTagList) //now we want to get the source URL
{
QRegExp urlRegex("src=\"(.*)\"", Qt::CaseInsensitive);
urlRegex.setMinimal(true);
urlRegex.indexIn(imgTag);
QStringList resultList = urlRegex.capturedTexts();
resultList.removeFirst();
imageUrls.append(resultList.first());
}
К тому времени, когда я попал в петлю foreach
, то imgTagList
содержит только 1 строку. Для «Кошек в Древнем Египте» Википедия страница, она содержит:
<img alt="" src="//upload.wikimedia.org/wikipedia/commons/thumb/1/13/Egypte_louvre_058.jpg/220px-Egypte_louvre_058.jpg" width="220" height="407" class="thumbimage" srcset="//upload.wikimedia.org/wikipedia/commons/thumb/1/13/Egypte_louvre_058.jpg/330px-Egypte_louvre_058.jpg 1.5x, //upload.wikimedia.org/wikipedia/commons/1/13/Egypte_louvre_058.jpg 2x" />
Что я хочу, но я знаю есть больше тегов изображений на странице ... любые идеи, почему я только получить первый назад?
Update
С помощью Себастьян Ланге, я был в состоянии получить это далеко:
QRegExp imgTagRegex("<img.*src=\"(.*)\".*>", Qt::CaseInsensitive);
imgTagRegex.setMinimal(true);
QStringList urlMatches;
QStringList imgMatches;
int offset = 0;
while(offset >= 0)
{
offset = imgTagRegex.indexIn(pDocument, offset);
offset += imgTagRegex.matchedLength();
QString imgTag = imgTagRegex.cap(0);
if (!imgTag.isEmpty())
imgMatches.append(imgTag); // Should hold complete img tag
QString url = imgTagRegex.cap(1);
if (!url.isEmpty())
{
url = url.split("\"").first(); //ehhh....
if (!urlMatches.contains(url))
urlMatches.append(url); // Should hold only src property
}
}
split
в конце концов, это Hacky способ избавления от неправительственных -src в теге <img>
, так как похоже, что я не могу получить только данные внутри сегмента src="..."
. Он работает, но это только потому, что я не могу правильно выбрать способ его работы. Я также добавил некоторые вещи, чтобы стандартизировать
Благодаря Себастьян, я дам этому попытку и возвращайся к тебе. –
Я как бы забыл закрытие скобки, я отредактировал сообщение –
Похоже, 'indexIn' возвращает' -1' при первом прохождении. –