Expression régulière pour obtenir un attribut de balise HTML
Je suis à la recherche d'une expression régulière qui peut me faire de la src (insensible à la casse) balise à partir de la suite des extraits de code HTML en java.
<html><img src="kk.gif" alt="text"/></html>
<html><img src='kk.gif' alt="text"/></html>
<html><img src = "kk.gif" alt="text"/></html>
OriginalL'auteur Krishna Kumar | 2009-07-03
Vous devez vous connecter pour publier un commentaire.
Qu'une seule possibilité:
est une possibilité (s'ils correspondent au cas insensiblement). C'est un peu le bazar, et ignore délibérément le cas où les guillemets ne sont pas utilisées. Pour la représenter sans vous soucier de la chaîne s'échappe:
Cela correspond à:
<img
>
(à savoir la possibilité d'autres attributs)src
=
'
ou"
>
(plus d'attributs possibles)>
pour fermer la baliseChoses à noter:
src=
ainsi, déplacez le crochet ouvert à gauche 🙂>
ou les sources d'images qui incluent'
ou"
).La première submatch doit retourner ce que vous voulez. Voir java.sun.com/docs/books/tutorial/essential/regex/groups.html pour savoir comment accéder au groupe. Vous souhaitez utiliser le
group()
méthode sur votre résultat du match, avec l'argument1
.Voir le code de cletus ci-dessus pour un exemple sur la façon d'obtenir une capturé sous-groupe -- vous voulez juste l'argument de
group()
être1
.Je suis si heureux qu'il existe des gens dans ce monde qui non seulement comprendre des expressions régulières beaucoup plus que moi, mais sont également assez agréable à partager cette compréhension. Cette expression est précisément ce dont j'avais besoin. Merci!!!!!!
Je tiens également à obtenir le plein <a></a> comment faire?
OriginalL'auteur DMI
Cette question revient beaucoup ici.
Les expressions régulières sont un mauvais façon de traiter ce problème. Faites-vous une faveur et à l'utilisation d'un analyseur HTML d'une certaine sorte.
Regexes sont feuilletée pour l'analyse de code HTML. Vous vous retrouverez avec un compliqué expression qui va se comporter de façon inattendue, dans certains cas du coin qui sera se produire autrement.
Edit: Si votre code HTML est simple alors:
Et il y a n'importe quel nombre de Java HTML analyseurs.
Dire que sans le lier à un analyseur n'est pas vraiment utile.
Je suis d'accord, mais j'ai un petit extrait des données et pour chaque élément de données dans la boucle et ne savez pas si un analyseur de chargement et d'obtenir la valeur sera viable du point de vue des performances
dire que sans le lier à un analyseur est pas utile ;). voici une liste de l'open source java analyseurs: java-source.net/open-source/html-parsers
juste pour info -- I est à l'aide d'un analyseur HTML parce que le théorique, faites-les choses-"Le Droit Chemin(tm)" une partie de moi voulait, ainsi, de faire les choses de la bonne façon. 🙂 Malheureusement, il s'avère que l'exécution d'un analyseur HTML--même un léger--sur des dizaines de chaînes HTML en vertu de ressources limitées, des appareils Android a été trouvé pour être un peu irréaliste. L'expression rationnelle de la méthode sur l'autre main est extrêmement rapide... les délais de traitement ont été réduits d'environ 30 secondes par flux RSS (avec une moyenne de 10 chaînes HTML pour analyser par flux) à ~2 secondes. En contournant l'analyseur à l'aide d'une base de XPath solution peut être un bon compromis.
OriginalL'auteur cletus
Cette réponse est pour google les chercheurs, Parce que c'est trop tard
Copie de cletus a montré une erreur et
La modification de sa réponse et en passant à Chaîne modifiée
src\\s*=\\s*([\"'])?([^\"']*)
comme paramètre passé dansPattern.compile
a fonctionné pour moi,Ici est l'exemple complet
OriginalL'auteur Shree Krishna
Tu veux dire que le src-attribut de l'img-Tag? Dans ce cas, vous pouvez aller avec les éléments suivants:
Qui devrait fonctionner. L'expression src='...' est dans la parenthèse, il est un comparateur de groupe et peuvent être traitées séparément.
Qui va travailler, jusqu'à ce que quelqu'un utilise des apostrophes à la place des guillemets à la limite de la valeur de l'attribut (src='foo'). Aussi, votre approche serait un échec si la balise img eu d'autres attributs. La complexité de ce processus est assez élevé, bien que vous pouvez obtenir la plupart des cas, avec une bonne regex. Je n'ai pas une pratique si.
Merci pour la réponse; cette regEx compilation est de ne pas en java avec d'erreur suivant. java.util.regex.PatternSyntaxException: Unclosed gro p près index 43 <[Ii][Mm][Gg]\s*([Ss][Rr][Cc]\s*=\s*\".*?\" ^
J'ai corrigé quelques problèmes.
J'ai édité de nouveau pour inclure des guillemets simples.
OriginalL'auteur Mnementh