如何使用QRegExp和QString获取图像标签的src

时间:2018-07-09 19:09:55

标签: regex qt qstring qregexp

所以我的应用程序中有一个字符串,其中包含html img标签

<img src="imagsource.jpg" width="imageWidth" />

现在,我想在两个不同的字符串中提取图像标签及其src属性。所以我想做的是这样:

QRegExp imageRegex("\\<img[^\\>]*src\\s*=\\s*\"([^\"]*)\"[^\\>]*\\>", Qt::CaseInsensitive);

int a = imageRegex.indexIn(description);
int b = a + imageRegex.matchedLength();

QString imgTag = description.mid(a,b); // this kind of works but doesn't return the img tag properly (extra information is included)

// how to obtain the "src" attribute, I have tried this: src\s*=\s*\"(.+?)" but it doesn't work
QString imgSrc = ??

我尝试查看其他有关如何使用正则表达式从其他字符串中提取字符串的文章,我尝试在QRegExp中使用相同的模式,但是它们似乎无法给出正确的结果。

2 个答案:

答案 0 :(得分:2)

尝试一下

<img(?=\s)(?=(?:[^>"']|"[^"]*"|'[^']*')*?\ssrc\s*=\s*(?:(['"])([\S\s]*?)\1))\s+(?:"[\S\s]*?"|'[\S\s]*?'|[^>]*?)+>

https://regex101.com/r/qaQPPU/1

src 值位于捕获组2中。

可读正则表达式

 < img                  # Begin img tag
 (?= \s )
 (?=                    # Asserttion (a pseudo atomic group)
      (?: [^>"'] | " [^"]* " | ' [^']* ' )*?
      \s src \s* = \s*       # src Attribute
      (?:
           ( ['"] )               # (1), Quote
           ( [\S\s]*? )           # (2), src Value
           \1 
      )
 )
                        # Have the value, just match the rest of tag
 \s+ 
 (?: " [\S\s]*? " | ' [\S\s]*? ' | [^>]*? )+

 >                      # End tag

更新

使用Qt版本5或更高版本(5.11?)。

使用的版本更像正则表达式的 Perl

参考:http://doc.qt.io/qt-5/qregularexpression.html

示例:

QRegularExpression re("<img(?=\\s)(?=(?:[^>\"']|\"[^\"]*\"|'[^']*')*?\\ssrc\\s*=\\s*(?:(['\"])([\\S\\s]*?)\\1))\\s+(?:\"[\\S\\s]*?\"|'[\\S\\s]*?'|[^>]*?)+>");
QRegularExpressionMatch match = re.match("<img src=\"imagsource.jpg\"     width=\"imageWidth\" />", 1);
if (match.hasMatch()) {
    QString matched = match.captured(2); // matched -> imagsource.jpg
    // ...
}

答案 1 :(得分:0)

您可以使用此:

<img.*src=(?:"(.*?)"|'(.*?)').*>

https://regex101.com/r/qaQPPU/3

它将在整个比赛中捕获整个标签,然后在第一组中捕获src标签的内容。