Cómo obtener la URL de la imagen de una cadena html usando expresiones regulares

Thiha Aung

Estoy tratando de obtener una cadena html usando expresiones regulares en las que estoy trabajando actualmente es esto:

extension String {
func regex (pattern: String) -> [String] {
    do {
        let regex = try NSRegularExpression(pattern: pattern, options: NSRegularExpressionOptions(rawValue: 0))
        let nsstr = self as NSString
        let all = NSRange(location: 0, length: nsstr.length)
        var matches : [String] = [String]()
        regex.enumerateMatchesInString(self, options: NSMatchingOptions(rawValue: 0), range: all) {
            (result : NSTextCheckingResult?, _, _) in
            if let r = result {
                let result = nsstr.substringWithRange(r.range) as String
                matches.append(result)
            }
        }
        return matches
    } catch {
        return [String]()
    }
}

Y el patrón es: <img[^>]+src\\s*=\\s*['\']([^'\"]+)['\"][^>]*>

Todavía no puedo obtener la URL de la imagen, lo que significa que me devuelve una matriz vacía.En realidad, mi cadena html incluye una imagen.No quiero usar UIWebViewdebido a un UITableViewproblema de cambio de tamaño.Por lo tanto, necesito obtener la URL de la imagen de html y muéstrelo en UIImageView usando AlamofireImage.

¿Alguna ayuda? Era solo una URL que necesitaba buscar.

Aquí está mi etiqueta:

<img src="https://en.wikipedia.org/wiki/File:BH_LMC.png"/>

A :

https://en.wikipedia.org/wiki/File:BH_LMC.png
Ro Yo Mi

Descripción

<img\b(?=\s)(?=(?:[^>=]|='[^']*'|="[^"]*"|=[^'"][^\s>]*)*?\ssrc=['"]([^"]*)['"]?)(?:[^>=]|='[^']*'|="[^"]*"|=[^'"\s]*)*"\s?\/?> 

Visualización de expresiones regulares

Esta expresión regular hará lo siguiente:

  • Esta expresión regular captura toda la etiqueta IMG
  • Coloca el valor del atributo de origen en el grupo de captura 1, sin comillas si existen.
  • Permitir que los atributos tengan comillas simples, dobles o sin comillas
  • Puede modificarse para validar cualquier número de otros atributos.
  • Evite casos extremos difíciles que tienden a dificultar el análisis de HTML

Ejemplo

Demo en vivo

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

Texto de ejemplo

Tenga en cuenta el caso de borde difícil en la primera línea donde estamos buscando un droide específico.

<img onmouseover=' if ( 6 > 3 { funSwap(" src="NotTheDroidYourLookingFor.jpg", 6 > 3 ) } ; ' src="http://website/ThisIsTheDroidYourLookingFor.jpeg" onload="img_onload(this);" onerror="img_onerror(this);" data-pid="jihgfedcba" data-imagesize="ppew" />
some text

<img src="http://website/someurl.jpeg" onload="img_onload(this);" />
more text
<img src="https://en.wikipedia.org/wiki/File:BH_LMC.png"/>

Partidos de muestra

  • El grupo de captura 0 obtiene la etiqueta IMG completa
  • El grupo de captura 1 obtiene solo el valor del atributo src
[0][0] = <img onmouseover=' funSwap(" src='NotTheDroidYourLookingFor.jpg", data-pid) ; ' src="http://website/ThisIsTheDroidYourLookingFor.jpeg" onload="img_onload(this);" onerror="img_onerror(this);" data-pid="jihgfedcba" data-imagesize="ppew" />
[0][1] = http://website/ThisIsTheDroidYourLookingFor.jpeg

[1][0] = <img src="http://website/someurl.jpeg" onload="img_onload(this);" />
[1][1] = http://website/someurl.jpeg

[2][0] = <img src="https://en.wikipedia.org/wiki/File:BH_LMC.png"/>
[2][1] = https://en.wikipedia.org/wiki/File:BH_LMC.png

Explicación

NODE                     EXPLANATION
----------------------------------------------------------------------
  <img                     '<img'
----------------------------------------------------------------------
  \b                       the boundary between a word char (\w) and
                           something that is not a word char
----------------------------------------------------------------------
  (?=                      look ahead to see if there is:
----------------------------------------------------------------------
    \s                       whitespace (\n, \r, \t, \f, and " ")
----------------------------------------------------------------------
  )                        end of look-ahead
----------------------------------------------------------------------
  (?=                      look ahead to see if there is:
----------------------------------------------------------------------
    (?:                      group, but do not capture (0 or more
                             times (matching the least amount
                             possible)):
----------------------------------------------------------------------
      [^>=]                    any character except: '>', '='
----------------------------------------------------------------------
     |                        OR
----------------------------------------------------------------------
      ='                       '=\''
----------------------------------------------------------------------
      [^']*                    any character except: ''' (0 or more
                               times (matching the most amount
                               possible))
----------------------------------------------------------------------
      '                        '\''
----------------------------------------------------------------------
     |                        OR
----------------------------------------------------------------------
      ="                       '="'
----------------------------------------------------------------------
      [^"]*                    any character except: '"' (0 or more
                               times (matching the most amount
                               possible))
----------------------------------------------------------------------
      "                        '"'
----------------------------------------------------------------------
     |                        OR
----------------------------------------------------------------------
      =                        '='
----------------------------------------------------------------------
      [^'"]                    any character except: ''', '"'
----------------------------------------------------------------------
      [^\s>]*                  any character except: whitespace (\n,
                               \r, \t, \f, and " "), '>' (0 or more
                               times (matching the most amount
                               possible))
----------------------------------------------------------------------
    )*?                      end of grouping
----------------------------------------------------------------------
    \s                       whitespace (\n, \r, \t, \f, and " ")
----------------------------------------------------------------------
    src=                     'src='
----------------------------------------------------------------------
    ['"]                     any character of: ''', '"'
----------------------------------------------------------------------
    (                        group and capture to \1:
----------------------------------------------------------------------
      [^"]*                    any character except: '"' (0 or more
                               times (matching the most amount
                               possible))
----------------------------------------------------------------------
    )                        end of \1
----------------------------------------------------------------------
    ['"]?                    any character of: ''', '"' (optional
                             (matching the most amount possible))
----------------------------------------------------------------------
  )                        end of look-ahead
----------------------------------------------------------------------
  (?:                      group, but do not capture (0 or more times
                           (matching the most amount possible)):
----------------------------------------------------------------------
    [^>=]                    any character except: '>', '='
----------------------------------------------------------------------
   |                        OR
----------------------------------------------------------------------
    ='                       '=\''
----------------------------------------------------------------------
    [^']*                    any character except: ''' (0 or more
                             times (matching the most amount
                             possible))
----------------------------------------------------------------------
    '                        '\''
----------------------------------------------------------------------
   |                        OR
----------------------------------------------------------------------
    ="                       '="'
----------------------------------------------------------------------
    [^"]*                    any character except: '"' (0 or more
                             times (matching the most amount
                             possible))
----------------------------------------------------------------------
    "                        '"'
----------------------------------------------------------------------
   |                        OR
----------------------------------------------------------------------
    =                        '='
----------------------------------------------------------------------
    [^'"\s]*                 any character except: ''', '"',
                             whitespace (\n, \r, \t, \f, and " ") (0
                             or more times (matching the most amount
                             possible))
----------------------------------------------------------------------
  )*                       end of grouping
----------------------------------------------------------------------
  "                        '"'
----------------------------------------------------------------------
  \s?                      whitespace (\n, \r, \t, \f, and " ")
                           (optional (matching the most amount
                           possible))
----------------------------------------------------------------------
  \/?                      '/' (optional (matching the most amount
                           possible))
----------------------------------------------------------------------
  >                        '>'
----------------------------------------------------------------------

Este artículo se recopila de Internet, indique la fuente cuando se vuelva a imprimir.

En caso de infracción, por favor [email protected] Eliminar

Editado en
0

Déjame decir algunas palabras

0Comentarios
Iniciar sesiónRevisión de participación posterior

Artículos relacionados

¿Cómo eliminar la URL que comienza con www. *** de una cadena usando expresiones regulares?

Cómo obtener etiquetas html de una cadena usando expresiones regulares para javascript

Extrayendo la URL de la cadena usando expresiones regulares

Cómo seleccionar la primera letra de cada palabra de una cadena usando expresiones regulares

Javascript: reemplace el nombre de la imagen con expresiones regulares en una cadena html

¿Cómo encuentro la primera aparición de "&" en una cadena usando expresiones regulares?

Cómo eliminar la puntuación de una cadena con excepciones usando expresiones regulares en bash

La URL de Django usa una cadena en expresiones regulares

Cómo obtener una cadena en expresiones regulares y eliminar otra después de hacer coincidir la cadena

Cómo obtener números de una cadena en una lista en Python usando expresiones regulares

Cómo obtener groupdict de una cadena de varias líneas usando expresiones regulares

¿Cómo dividir una URL de la última barra usando expresiones regulares?

¿Cómo dividir una URL de la última barra usando expresiones regulares?

Cómo obtener variables y valores de una cadena usando expresiones regulares

¿Cómo selecciono una parte de una cadena usando expresiones regulares y la pongo en una variable en Powershell?

Cómo obtener solo los nombres de campo de la cadena dada en formato de objeto (sin usar POJO) de la siguiente cadena usando expresiones regulares

¿Cómo obtener la ruta del archivo de la cadena coincidente con expresiones regulares?

No se puede obtener la ruta de la imagen usando expresiones regulares

¿Cómo extraer una cadena de un nombre de archivo que contiene la fecha usando expresiones regulares en Python?

¿Cómo usar expresiones regulares para obtener diferentes tipos de valores de la cadena?

¿Cómo extraer el valor de la moneda de la cadena usando expresiones regulares en dart?

Cómo obtener la lista de cadena de patrón y la cadena de coincidencias de expresiones regulares en Java

Cómo eliminar cierta cadena de la cadena original usando expresiones regulares en Java

Usando expresiones regulares, ¿cómo puedo hacer coincidir la primera palabra después de una cadena en particular?

¿Cómo verificar si todos los elementos de la lista están presentes en una cadena usando expresiones regulares?

¿Cómo escribir el patrón de expresiones regulares para obtener la cadena coincidente?

cómo eliminar la ruta del archivo / carpeta de la cadena usando expresiones regulares

¿Cómo puedo ignorar una cadena en la coincidencia de grupos de expresiones regulares de Python?

¿Cómo expresar una instrucción de ensamblaje lw / sw usando la biblioteca de expresiones regulares de expresiones regulares?

TOP Lista

  1. 1

    ¿Cómo ocultar la aplicación web de los robots de búsqueda? (ASP.NET)

  2. 2

    Kibana 4 , making pie chart , error message

  3. 3

    Manera correcta de agregar referencias al proyecto C # de modo que sean compatibles con el control de versiones

  4. 4

    récupérer les noms de clés depuis Firebase react-native

  5. 5

    OAuth 2.0 utilizando Spring Security + WSO2 Identity Server

  6. 6

    Cómo eliminar o caducar las cookies en Chrome usando asp.net

  7. 7

    desbordamiento: oculto no funciona al hacer zoom en un iframe de YouTube usando transformar

  8. 8

    Cómo extraer una palabra clave (cadena) de una columna en pandas dataframe en python

  9. 9

    Link library in Visual Studio, why two different ways?

  10. 10

    선언되지 않은 유형 'MessagingDelegate'사용

  11. 11

    actualizar el contenido de la vista de reciclaje falla en la hoja inferior

  12. 12

    Ver todos los comentarios en un video de YouTube

  13. 13

    Problema con la vista de impresión de PDF

  14. 14

    ¿Cómo pintar el Dropline de un RowHeader-JTable en el Main-JTable durante un DragAndDrop?

  15. 15

    Pregunta de fórmula de desplazamiento y transposición de Excel / Google Sheets

  16. 16

    ¿Cómo puedo hacer accesible la información de color en tablas HTML?

  17. 17

    ¿Cómo generalizar el JSON en el procedimiento almacenado?

  18. 18

    Recortar fotos rectangulares de escaneos en OpenCV con Python

  19. 19

    2D 배열에 대한 Numpy 요소 별 평균 계산

  20. 20

    Typescript의 "window"전역 개체에 "adsbygoogle"애드 센스 속성을 추가하는 방법은 무엇입니까?

  21. 21

    Error: la ejecución falló para la tarea ': app: compileDebugJavaWithJavac'. java.io.FileNotFoundException:

CalienteEtiquetas

Archivo