[PHP] ereg html href tags

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • ingmdijkstra
  • Registratie: November 2005
  • Laatst online: 14-09-2023
Van een aantal html documenten moet de links en inhoud geupdate worden.
Nu probeer ik met ereg de links uit het document te halen maar dit wil niet echt lukken.
Als ik dit doe dan wordt de eerste alles tussen de eerste <a en de laatste </a> gepakt.
Wat moet ik nu doen om dit te wijzigen.
Had zelf al verschillende
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
$htmlcode = "
<html>
<body>
<P>
<a href='linkje.html' class="className" alt="linkje">linkje</a>
</br>
<a href='linkje2.html' class="className2" alt="linkje2">
<img src='locatieplaatje'/>
</a>
</P>
</body>
</html>
";
$pattern = '/^(.*)(<a(.*)href=(^\s)+>(.*)</a>)(.*)$/si';
$pattern = '/^(.*)(<a.*)href=([^\s]+)([^\>]+>)(.*)</a>(.*)$/si';
preg_match($pattern,$htmlcode,$matches);
echo "<pre>";
  print_r($matches);
echo "</pre>";

Acties:
  • 0 Henk 'm!

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 15:29

crisp

Devver

Pixelated

ungreedy maken

Intentionally left blank


Acties:
  • 0 Henk 'm!

  • ingmdijkstra
  • Registratie: November 2005
  • Laatst online: 14-09-2023
Probeerde je al eerder te bedanken, maar het lag er even uit.

Hierbij alsnog. Bedankt!

Ungreedy maken werkt wel alleen lijkt PHP mijn pregmatch even verkeerd op te pakken.
Gebruik voor regalur expressions zelf 'the regex coach' en binnen dit tooltje werkt de pattern wel.

PHP:
1
2
3
4
5
6
7
$subject1 = '<a href="linkje" class="className"><img src="plaatje" alt="plaatje"></a>';
$subject2 = '<a href="linkje"><img src="plaatje" alt="plaatje"></a>';

$pattern = "/(.*)(<a .*href=)([^ \>]+)([^\>]+>)(.*)(<\/a>)(.*)$/si"; 
//voor ungreedy moet de 'U' er nog bij maar heeft geen invloed op dit resultaat.

preg_match($pattern,$subject,$matches);


Bij subject 1 gaat het goed maar helaas bij subject 2 niet omdat er geen ruimte is tussen de href variabele en de >

Kan iemand mij helpen om dit probleem op te lossen.

Acties:
  • 0 Henk 'm!

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 15:29

crisp

Devver

Pixelated

Je moet dit soort dingen ook niet in 1 enkele expressie willen doen; match gewoon eerst de tags en ga dan daarbinnen op zoek naar het href attribuut:
PHP:
1
2
3
4
5
6
7
8
preg_match_all('/<a(\s[^>]*)>(.*?)<\/a>/is', $htmlcode, $matches);
foreach ($matches[1] as $match)
{
    if (preg_match('/\shref=("[^"]*"|\'[^\']*\'|[^\s]*)(\s|$)/i', $match, $href))
    {
        echo 'href: ' . trim($href[1], '"\'') . '<br>';
    }
}

Intentionally left blank


Acties:
  • 0 Henk 'm!

Verwijderd

Zou dit niet werken?

code:
1
preg_match('@ href=\"(.*?)\".*?\<\\a>@is'), $source, $match);


(Ja er zit waarschijnelijk wel een fout in, maar gaat om het idee :p)