2011-06-15 105 views
11

¿Cómo puedo obtener una cadena dentro de las comillas dobles usando la expresión regular?Comillas dobles en la expresión regular

que tienen la siguiente cadena:

<img src="http://yahoo.com/img1.jpg" alt=""> 

Quiero obtener la cadena http://yahoo.com/img1.jpg alt="" exterior. ¿Cómo puedo hacer esto usando la expresión regular?

+1

.net? php? ¿Rubby? – rerun

+0

usando regex en java – Ammu

+1

¿Siempre quieres tener también la etiqueta alt? – Kaj

Respuesta

10

No sé por qué quieres el la etiqueta alt también, pero esta expresión regular hace lo que quiere: El grupo 1 es la URL y el grupo 2 es la etiqueta alt. Me posiblemente modifico la expresión regular un poco si no puede haber varios espacios entre img src y, y si no puede haber espacios en torno a '='

Pattern p = Pattern.compile("<img src=\"([^\"]*)\" (alt=\"[^\"]*\")>"); 
Matcher m = 
    p.matcher("<img src=\"http://yahoo.com/img1.jpg\" alt=\"\"> " + 
    "<img src=\"http://yahoo.com/img2.jpg\" alt=\"\">"); 

while (m.find()) { 
    System.out.println(m.group(1) + " " + m.group(2)); 
} 

Salida:

http://yahoo.com/img1.jpg alt="" 
http://yahoo.com/img2.jpg alt="" 
8

Puede hacerlo de esta manera:

Pattern p = Pattern.compile("<img src=\"(.*?)\".*?>"); 
Matcher m = p.matcher("<img src=\"http://yahoo.com/img1.jpg\" alt=\"\">"); 
if (m.find()) 
    System.out.println(m.group(1)); 

Sin embargo, si estás análisis de HTML considere el uso de alguna biblioteca: expresiones regulares no son una buena idea para analizar HTML. Tuve buenas experiencias con jsoup: he aquí un ejemplo:

String fragment = "<img src=\"http://yahoo.com/img1.jpg\" alt=\"\">"; 
Document doc = Jsoup.parseBodyFragment(fragment); 
Element img = doc.select("img").first(); 
String src = img.attr("src"); 
System.out.println(src); 
+0

El patrón es demasiado codicioso cuando se busca '>' – Kaj

+0

@Kaj: ¡gracias! Modifiqué la expresión regular – MarcoS

+0

Genial, puedo votar por ti :) – Kaj

2

Esto debería hacer el trabajo:

String url = ""; 
Pattern p = Pattern.compile("(?<=src=\")[^\"]*(?=\")"); 
Matcher m = p.matcher("<img src=\"http://yahoo.com/img1.jpg\" alt=\"\">"); 
if (m.find()) 
    url = m.group()); 

El analizador se llevará a todos los Char excepto"despuéssrc=" y antes"

+0

No sé cómo leer la publicación por la operadora, pero su ejemplo muestra que también quiere la etiqueta alt. (No sé por qué, y no sé por qué él también quiere la etiqueta, y no solo el valor de la etiqueta alt) – Kaj

+0

@Kaj - Ya veo, pero me salteé esa parte porque esa mezcla de a * link url * y el atributo 'alt' (nombre y valor en notación xml) olía a typo;) –

Cuestiones relacionadas