PDA

Bekijk Volledige Versie : [PHP] Regular Expression voor bewerken interne links



Maarten Wierda
29/12/04, 17:15
Hallo,

Ik ben op zoek naar een regular expression die een interne link bewerkt.

Onderstaande link moet bijvoorbeeld worden aangepast.

<a href="/dir/folder/#foo"> -> <a href="#foo">

Met het volgende stukje code kom ik al een heel eind.

$foo= preg_replace("/href=\"(.*?)#(.*?)\"/", "href=\"#\\2\"", $foo);

Echter, deze expressie past dit ook onderstaande code aan.

'<a href="mailto:foo@bar.invalid"><font color="#000000">Naam' in '<a
href="#000000">Naam'

Dat klopt natuurlijk ook wel aangezien 'mailto:foo@bar.invalid"><font
color="#000000' ook onder /iets/ valt.

Nu wil ik een uitzondering in de expressie toevoegen zodat alleen de
waarde van het href-attribuut evt. wordt vervangen. Ik zat te denken aan
het volgende, maar dat levert hetzelfde resultaat op.

/href=\"(.*?[^(><)])#(.*?)\"/

Heeft iemand een idee?

Gr. Maarten Wierda

Daniel Tryba
29/12/04, 17:55
Maarten Wierda <maartenAT@norecessdot.com> wrote:
> <a href="/dir/folder/#foo"> -> <a href="#foo">
>
> Met het volgende stukje code kom ik al een heel eind.
>
> $foo= preg_replace("/href=\"(.*?)#(.*?)\"/", "href=\"#\\2\"", $foo);
[knip]
> /href=\"(.*?[^(><)])#(.*?)\"/

/href="[^#"]+(#[^"]*?)"/href="\\1"/ (niet getest)

Tenminste als alle href netjes door " worden omgeven. Een meer
omslachtige maar robustere manier zou met een preg_replace_callback
zijn, match eerst de href en dan de substitute.

John Bokma
29/12/04, 19:55
Maarten Wierda wrote:

volgende, maar dat levert hetzelfde resultaat op.
>
> /href=\"(.*?[^(><)])#(.*?)\"/

Als die preg dingen echt perl compatible zijn:

/(href=").+?(#.+?")/$1$2/

Niet getest e.d. (en net wakker!)

--
John Voorbeeldscripts in Perl: http://johnbokma.com/perl/
Website design: http://johnbokma.com/websitedesign/
Ervaren Perl / Java programmeur beschikbaar: http://castleamber.com/
Tevreden opdrachtgevers: http://castleamber.com/testimonials.html

Maarten Wierda
05/01/05, 14:35
Daniel Tryba wrote:

> [knip]
>
>>/href=\"(.*?[^(><)])#(.*?)\"/
>
> /href="[^#"]+(#[^"]*?)"/href="\\1"/ (niet getest)

Bedankt, met deze regexp is 't gelukt.

Gr. Maarten