zurück zur Startseite
  


Zurück XHTMLforum > Webentwicklung (außer XHTML und CSS) > Serveradministration und serverseitige Scripte
Seite neu laden Regex: Hyperlinks mit passenden Icons versehen.

Antwort
 
LinkBack Themen-Optionen Ansicht
  #11 (permalink)  
Alt 03.02.2007, 13:34
Erfahrener Benutzer
XHTMLforum-Mitglied
 
Registriert seit: 21.01.2007
Beiträge: 106
Artemis befindet sich auf einem aufstrebenden Ast
Standard

Also um Links aus einem Dokument zu filtern kannst du diesen RegEx benutzen. Diese Links kannst du dann mit diesem RegEx überprüfen ob er eine Klasse enthält.
Mit Zitat antworten
Sponsored Links
  #12 (permalink)  
Alt 03.02.2007, 20:35
Benutzerbild von Zen5656
Erfahrener Benutzer
XHTMLforum-Mitglied
Thread-Ersteller
 
Registriert seit: 24.07.2006
Beiträge: 378
Zen5656 befindet sich auf einem aufstrebenden Ast
Standard

Super Artemis Vielen dank!! Wie mach ich dann das mit dem ersetzen? Bin nicht so fit...


Hab mal ein script geschrieben:

Code:
$suchmuster = '/<a [^>]*?class="([^"]*?)"[^>]*?>/';

$ersetzung = '????? bar?????';

$zeichenkette='<a href="http://www.google.de" class="foo">GOOGLE</a>';


echo preg_replace($suchmuster, $ersetzung, $zeichenkette);
Ich will ja <a href="http://www.google.de" class="foo"> zu <a href="http://www.google.de" class="foo bar">

Danke

MfG Zen
Mit Zitat antworten
Sponsored Links
  #13 (permalink)  
Alt 03.02.2007, 20:52
Benutzerbild von Zen5656
Erfahrener Benutzer
XHTMLforum-Mitglied
Thread-Ersteller
 
Registriert seit: 24.07.2006
Beiträge: 378
Zen5656 befindet sich auf einem aufstrebenden Ast
Standard

Code:
$suchmuster = '/(<a [^>]*?class="[^"]*?)("[^>]*?>)/';

$ersetzung = '$1 bla$2';
Ok so

So jetzt die Forgensweise ausarbeiten
Mit Zitat antworten
  #14 (permalink)  
Alt 03.02.2007, 21:37
Benutzerbild von Zen5656
Erfahrener Benutzer
XHTMLforum-Mitglied
Thread-Ersteller
 
Registriert seit: 24.07.2006
Beiträge: 378
Zen5656 befindet sich auf einem aufstrebenden Ast
Standard

Ok habe jetzt eine Idee. Aber dafür brauche ich nochmal eure Hilfe

Ich möchte den quelltext per regex nach Links durchsuchen und dann den link in ein Array speichern. Den code für die regex hat oben Artemis schon gepostet

regex regex

So jetzt soll jeder Link einzeln in ein Array geschrieben werden. Sowas soll rauskommen:

Array (
[0] => http://xhtmlforum.de/
[1] => http://xhtmlforum.de/faq.php
)

Jemand ne idee wie ich das mache??

MfG Zen
Mit Zitat antworten
  #15 (permalink)  
Alt 03.02.2007, 22:05
Erfahrener Benutzer
XHTMLforum-Mitglied
 
Registriert seit: 21.01.2007
Beiträge: 106
Artemis befindet sich auf einem aufstrebenden Ast
Standard

Du musst dazu preg_match_all benutzen.

PHP-Code:
$content 'Hier der ganze Content mit den vielen Links'

$matches = array();
preg_match_all('/<a [^>]*?href="([^"]*?)"[^>]*?>.*?</a>/'$content$matches);

for (
$i 0$i count($matches[0]); $i++) {
  if (
subtr($matches[1][$i], 07) === 'http://') {
    if (
strpos($matches[0][$i], 'class="')) {
      
$link preg_replace('/(.*?class="[^"]*)(".*?)/''$1 externer_link$2'$matches[0][$i]);
    } else {
      
$link '<a class="externer_link" '.substr($matches[0][$i], 3);
    }
    
$content replace($matches[0][$i], $link$content);
  }

Probier mal, obs klappt. Ist nicht getestet.
Mit Zitat antworten
  #16 (permalink)  
Alt 03.02.2007, 23:49
Benutzerbild von Zen5656
Erfahrener Benutzer
XHTMLforum-Mitglied
Thread-Ersteller
 
Registriert seit: 24.07.2006
Beiträge: 378
Zen5656 befindet sich auf einem aufstrebenden Ast
Standard

Moin. Ne hat leider nicht auf anhieb funktioniert. Meine Idee war auch so ähnlich.


Folgender Code:

Code:
$content= 'WWWWWW<a href="http://www.google.de" class="ass" target="">GOOGLE</a>
YYYYYY<a href="http://www.amazon.de" class="ass" target="">Amazon</a>XXXXXX';

preg_match_all('+<a [^>]*?href="([^"]*?)"[^>]*?>.*?</a>+', $content, $matches);

print_r ($matches);

foreach ($matches[1] as $url) {

    if (substr_count($url, 'http://') == 1){

        $suchmuster = '+(<a [^>]*?href="'.$url.'"[^>]*?)>+';
        echo $suchmuster."\n\n";
        preg_replace($suchmuster, '$1 class="icon" >', $content);
    }
}

echo $content;
Erzeugt das:

Code:
Array
(
    [0] => Array
        (
            [0] => <a href="http://www.google.de" class="ass" target="">GOOGLE</a>
            [1] => <a href="http://www.amazon.de" class="ass" target="">Amazon</a>
        )

    [1] => Array
        (
            [0] => http://www.google.de
            [1] => http://www.amazon.de
        )

)
+(<a [^>]*?href="http://www.google.de"[^>]*?)>+

+(<a [^>]*?href="http://www.amazon.de"[^>]*?)>+

WWWWWW<a href="http://www.google.de" class="ass" target="">GOOGLE</a>
YYYYYY<a href="http://www.amazon.de" class="ass" target="">Amazon</a>XXXXXX
Das preg_repace in der IF funktioniert also nicht. Jemand eine Idee warum?

MfG Zen
Mit Zitat antworten
  #17 (permalink)  
Alt 04.02.2007, 09:55
Erfahrener Benutzer
XHTMLforum-Mitglied
 
Registriert seit: 21.01.2007
Beiträge: 106
Artemis befindet sich auf einem aufstrebenden Ast
Standard

Ich musste bei meinem Code nur 3 Flüchtigkeitsfehler beseitigen.
1. Beim ersten RegEx einen anderen Begrenzer als /
2. subtr sollte substr sein
3. replace muss str_replace heißen

Jetzt funktioniert es wunderbar.

PHP-Code:
<?php

$content 
'ASDSADJK<a href="/start">Start</a>WWWWWW<a href="http://www.google.de" target="">GOOGLE</a>YYYYYY<a href="http://www.amazon.de" class="ass" target="">Amazon</a>XXXXXX';

$matches = array();
preg_match_all('@<a [^>]*?href="([^"]*?)"[^>]*?>.*?</a>@'$content$matches);

for (
$i 0$i count($matches[0]); $i++) {
  if (
substr($matches[1][$i], 07) === 'http://') {
    if (
strpos($matches[0][$i], 'class="')) {
      
$link preg_replace('/(.*?class="[^"]*)(".*?)/''$1 externer_link$2'$matches[0][$i]);
    } else {
      
$link '<a class="externer_link" '.substr($matches[0][$i], 3);
    }
    
$content str_replace($matches[0][$i], $link$content);
  }
}

echo 
'<pre>'.htmlspecialchars($content).'</pre>';

?>
Gibt das gewünschte Ergebnis aus:
Code:
ASDSADJK<a href="/start">Start</a>WWWWWW<a class="externer_link" href="http://www.google.de" target="">GOOGLE</a>YYYYYY<a href="http://www.amazon.de" class="ass externer_link" target="">Amazon</a>XXXXXX

Geändert von Artemis (04.02.2007 um 09:57 Uhr)
Mit Zitat antworten
  #18 (permalink)  
Alt 04.02.2007, 11:33
Benutzerbild von netspy
Erfahrener Benutzer
XHTMLforum-Kenner
 
Registriert seit: 13.08.2004
Ort: Leipzig
Beiträge: 1.953
netspy sorgt für eine eindrucksvolle Atmosphärenetspy sorgt für eine eindrucksvolle Atmosphäre
Standard

Ein wenig kürzer und übersichtlicher ist noch dieser Variante:

PHP-Code:
$content 'ASDSADJK<a href="/start">Start</a>WWWWWW<a href="http://www.google.de" target="">GOOGLE</a>YYYYYY<a href="http://www.amazon.de" class="ass" target="">Amazon</a>XXXXXX';

function 
link_replace($matches) {
  if (
strstr($matches[2], 'class="') !== FALSE) {
    return 
$matches[1].preg_replace('|class="([^"]+)"|i''class="$1 externer_link"'$matches[2]);
  } else {
    return 
$matches[1].'class="externer_link" '.$matches[2];
  }
}

$content preg_replace_callback('|(<a\s)([a-z_\s="]*href="http://[^>]+>)|isU''link_replace'$content);

echo 
'<pre>'.htmlspecialchars($content).'</pre>'
Mario
__________________
AppDev Blog · AppDev Forum
Mit Zitat antworten
  #19 (permalink)  
Alt 04.02.2007, 11:54
Benutzerbild von Zen5656
Erfahrener Benutzer
XHTMLforum-Mitglied
Thread-Ersteller
 
Registriert seit: 24.07.2006
Beiträge: 378
Zen5656 befindet sich auf einem aufstrebenden Ast
Standard

Wow, ihr habt das echt gut drauf

Artemis seine Lösung verstehe ich, auch wenn ich niemals von selbst drauf gekommen wäre. Netspy ist so an der grenze...

Kannst du mir mal erklären was '|(<a\s)([a-z_\s="]*href="http://[^>]+>)|isU' bei der regex das \s und das isU macht?

Bzw jetzt muss ich mir nochwas überlegen um z.B. .ppt und .doc etc zu matchen..

Außerdem möchte ich das man die Endungen + CLASSNAMEN in einer externen Datei ganz einfach reinschreiben kann. mal überlegen...

MfG Zen
Mit Zitat antworten
Sponsored Links
  #20 (permalink)  
Alt 04.02.2007, 12:01
Benutzerbild von netspy
Erfahrener Benutzer
XHTMLforum-Kenner
 
Registriert seit: 13.08.2004
Ort: Leipzig
Beiträge: 1.953
netspy sorgt für eine eindrucksvolle Atmosphärenetspy sorgt für eine eindrucksvolle Atmosphäre
Standard

\s steht für ein Whitespace (Leerzeichen, Tab, etc.) und die Suchmustermodifikatoren sind hier erklärt. U ist eigentlich überflüssig, schadet aber auch nicht.

Mario
__________________
AppDev Blog · AppDev Forum
Mit Zitat antworten
Sponsored Links
Antwort


Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
CSS - Meine Hyperlinks machen sich selbständig mikeanic CSS 4 22.12.2006 13:02


Alle Zeitangaben in WEZ +2. Es ist jetzt 07:20 Uhr.