Regexp pour extraire tous les liens et les textes d'ancrage de HTML
Je voudrais un ou plusieurs regexes qui peut:
1) Prendre le code html d'une page.
2) Trouver les url contenues dans tous les liens, par exemple:
<a href="http://example1.com">Test 1</a>
<a class="foo" id="bar" href="http://example2.com">Test 2</a>
<a onclick="foo();" id="bar" href="http://example3.com">Test 3</a>
Et ainsi de suite, il doit extraire l'url contenue dans le 'href'
attribut indépendamment de ce qui vient avant ou après le href
3) Extraire le texte d'ancre de tous les liens, par exemple dans les exemples ci-dessus, il doit retourner 'http://example1.com" et le texte d'ancre "Test 1", puis "http://example2.com" et "Test 2", et ainsi de suite.
Une raison quelconque vous ne voulez pas utiliser un DOM Parser pour cela? Et une raison quelconque vous ne pouvez pas trouver le double?
double possible de php expression régulière en fonction de l'url motif
double possible de expression Régulière pour extraire l'attribut href de l'élément
j'aime la façon dont cela se fait poser un million de fois chaque jour
double possible de gratter les données de la page html php
double possible de php expression régulière en fonction de l'url motif
double possible de expression Régulière pour extraire l'attribut href de l'élément
j'aime la façon dont cela se fait poser un million de fois chaque jour
double possible de gratter les données de la page html php
OriginalL'auteur Click Upvote | 2011-01-07
Vous devez vous connecter pour publier un commentaire.
Cette réponse est incomplète, en voici un qui fonctionne stackoverflow.com/questions/4423272/...
OriginalL'auteur Ollie
Vous avez besoin de prendre un coup d'oeil à regarder de l'avant et regarder derrière.
Voir mon commentaire ci-dessous GameBit de la solution. Il s'applique à votre Regex.
Non, il ne cassera pas si il y a des apostrophes à l'intérieur de ces attributs, il suffit de l'essayer. En fait, si vous utilisez cette regex #<a.*(?=href=\"([^\"]*)\")[^>]*>([^<]*)</a>|<a.*(?=href='([^']*)')[^>]*>([^<]*)</a> |<.*(?=href=([^\s]*)\ \ s)[^>]*>([^<]*)</a>#i ou quelque chose comme ça et vous jeter vide jeux de résultats par la suite, il ne sera même pas se briser si vous utilisez des guillemets simples ou non des guillemets à tous. Le seul moyen de rompre, il est à utiliser < dans le texte d'ancre, que je ne peux pas utiliser le regarder derrière avec un nombre illimité de caractères (une regex PHP limitation) pour vérifier si elle marque la fin du lien ou c'est un seul personnage à l'intérieur du texte
OriginalL'auteur Sergi
Cela permettra d'extraire à la fois le lien et le texte d'ancre.
Vraiment un très bon travail juste une regex et tout le travail effectué. Appris la nouvelle aujourd'hui.
OriginalL'auteur jayzantel
Essayer quelque chose comme cela:
OriginalL'auteur Diablo
celui-ci est assez robuste (à tester ici. martinwardener.com/regex):
\b(((src|href|action|url) *(=|:) *(?<mh>"|'|))(?<url>[\w ~$!*'/.?=#&@:%+,();\-\[\]]+)\k<mh>|url *\( *(?<mc>"|'|)(?<url>[\w ~$!*'/.?=#&@:%+,();\-\[\]]+)\k<mc>\))
OriginalL'auteur RolandasR
Aussi loin que l'utilisation de RegEx extraire des liens de HTML, il est sacrément robuste:
\b(((src|href|action|url) *(=|:) *(?<mh>"|'|))(?<url>[\w ~$!*'/.?=#&@:%+,();\-\[\]]+)\k<mh>|url *\( *(?<mc>"|'|)(?<url>[\w ~$!*'/.?=#&@:%+,();\-\[\]]+)\k<mc>\))
Voici un extrait tous les "plaine" du texte (c'est à dire du contenu en dehors des balises) à partir de documents HTML:
(<(?<tag>script|style)[\s\S]*?</\k<tag>>)|<!--[\s\S]*?-->|<[\s\S]*?>|(?<text>[^<>]*)
Tester ici: http://www.martinwardener.com/regex
OriginalL'auteur d7samurai