2010-01-13 4 views
0

Donc, je cherche à gratter les liens rapidshare.com à partir de sites Web. Je les expressions régulières suivantes pour trouver des liens:Regex qui trouve des liens hypertexte tout en excluant le texte brut

<a href=\"(http://rapidshare.com/files/(\\d+)/(.+)\\.(\\w{3,4}))\" 

http://rapidshare.com/files/(\\d+)/(.+)\\.(\\w{3,4}) 

Comment puis-je écrire un regex qui exclura le texte qui est intégré dans une balise <a href="...">. et seulement capturer le texte dans >here</a>

Je dois également garder à l'esprit que tous les liens ne sont pas intégrés dans les balises href. Certains sont simplement affichés en texte brut.

Fondamentalement, y at-il un moyen d'exclure des motifs dans regex?

Merci.

+0

Quel texte essayez-vous de capturer? Que signifie "texte ici>"? Texte au here ou texte ailleurs? – Cerin

+0

Une partie du texte ne s'affichait pas car l'OP n'utilisait pas le formatage du code. Cela devrait avoir plus de sens maintenant. –

Répondre

0

Pour saisir le texte intérieur d'une balise d'ancrage, tout en ignorant tout le texte d'attribut de la balise, vous devez utiliser les modèle:

<a href="http://rapidshare.com/files/(\d+)/(.+)\.(\w{3,4})[^>]*>(.*?)</a> 

La partie [^>] * correspond à tout le contenu de votre balise jusqu'à la fin de la balise de début. Le (. *?) Effectue une capture non-gourmande du texte interne.

Si vous souhaitez capturer des liens d'étiquette d'ancrage et des liens d'étiquette non-ancre, alors ce sont vraiment deux problèmes distincts. Il y a probablement une regex pour ça, mais ce serait terriblement compliqué. Vous êtes mieux de regarder simplement pour les liens non-ancre tag séparément avec la simple expression rationnelle:

[^'"]http://rapidshare.com/files/(\d+)/(.+)\.(\w{3,4}) 
+0

L'OP déclare que "tous les liens ne sont pas intégrés dans les tags href", donc votre suggestion ne correspond pas à la facture. – Kitson

0

Que diriez-vous comme ça, la dernière partie essaiera d'égaler toute chose, sauf ' " >

http://rapidshare.com/files/(\d+)/([^'"> ]+) 
+0

Cool .. Je vais essayer. Le projet est sur l'arrière brûleur atm :-( Cheers! – conor

-1

Que diriez-vous quelque chose comme:

/http:\/\/rapidshare.com\/files\/\d+\/[^<&\s]+\.\w{3,4}/ 

je me suis débarrassé des groupes de capture, parce que je pense Vous ne les avez que parce que vous pensiez en avoir besoin pour vous assurer que les différents groupes fonctionnaient bien et vous pouvez les ajouter si vous voulez vraiment qu'ils soient analysés.

Vous pouvez étendre sur la [^<&"\s] car il n'exclut des espaces blancs, le caractère < qui pourrait être le début de la balise, la & qui comprendrait des choses comme &nbsp; et d'autres entités HTML ou " qui serait la fin du href=. mais vous pouvez exclure non-valid URI character si vous le souhaitez. Cela devrait couvrir votre texte en ligne ainsi que ceux incorporés comme href.

Questions connexes