EisFuX: Regexp-Bedingung: Anchor's HREF-Tag

Beitrag lesen

hi nina,

bin mir sicher, dass sich da schon genug den kopf zerbrochen haben und es das schon gibt. aber ich finde nichts im web :(
und zwar soll, wenn in nem href tag eines links/anchors das zeichen ~ durch einen string ersetzt werden. doch wie muss der regexp lauten?

Wenn der "Link" so aussieht:

<a ... href="~" ...>...</a>

Dann klappt es hiermit fast immer:

  
$link = '... <a href="~" class="eine_klasse">ein Link</a> ...';  
$ersatz = 'irgendwas';  
$neu = preg_replace(  
  '/(\<a[^\>]+href\=)([\'\"])(\~)(\2)([^\>]*\>)/',  
  '$1$2'.$ersatz.'$4$5',  
  $link  
);  

Der RegEx aufgedröselt:

1. (<a[^>]+href=) ... alles, was vor dem href-Attribut kommt
2. (['"]) ... die linken Begrenzungszeichen für den Attributwert
3. (~) ... die Tilde
4. (\2) ... die rechten Begrenzungszeichen für den Attributwert
5. ([^>]*>) ... alles, was nach dem href-Attribut kommt

[^>] ... ein beliebiges Zeichen außer dem "Größer-Als"

\2 ... eine Rückreferenz ("back reference"), die genau das gleiche enthalten muss, wie das Muster, das in Klammer 2 gefunden wurde

PCRE-Suchmuster-Syntax
PCRE-Suchmuster-Modifikatoren

Was mir schon oft geholfen hat, ist die "Original-Anleitung" zu den PCRE:
http://www.pcre.org/pcre.txt

MffG
EisFuX

--
... Suchmaschinen-Blog ...