tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
2
ZUGRIFFE
736
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Avatar von Sven Petruschke
    Sven Petruschke Sven Petruschke ist offline Mitglied Diamant
    Registriert seit
    May 2003
    Ort
    Leipzig
    Beiträge
    2.323
    Hallo, vielleicht könnte sich ein RegExp-Gott meinem Problem annehmen. Sämtliche Versuche, Backreferences in das aktuelle Suchpattern einzubinden scheiterteten leider. Hier ein simples Beispiel:

    $str = "<b>Text</b>";
    preg_match("!<(.+?)>(.*?)</\1>!", $str, $matches);
    print_r($matches);

    (Den Code habe ich nicht gehighlightet, weil mir sonst der Backslash vor der Backreference entfernt wird)

    Ich versuche mittels \1 auf den Inhalt des ersten Subpatterns zuzugreifen.im oberen Beispiel sollte das erste Subpattern ein b finden und dieses über die Backreference in den abschließenden HTML-Tag einbinden. Doch preg_match() gibt FALSE zurück.

    Verwende ich als Suchpattern !<(.+?)>(.*?)</b>!, dann funktioniert es wunderbar.

    Weiss jemand, was ich falsch mache?

    Vielen Dank, snuu
    Geändert von Sven Petruschke (11.02.04 um 14:45 Uhr)
     
    Das Leben ist wie eine Ketchupflasche - erst kommt nichts und dann alles auf einmal.
    www.sven-petruschke.de

  2. #2
    Avatar von split
    split split ist offline Mitglied Platin
    Registriert seit
    Jan 2004
    Ort
    München
    Beiträge
    574
    Also ich kenn mich in diesem Thema nicht wirklich gut aus, aber ich habe mal wo gelesen, dass man Regex immer in einfachen ' schreiben sollte...
    So funktioniert's auch

    preg_match('!<(.+?)>(.*?)</\1>!', $str, $matches);

    //EDIT: Wenn du normale Anführungszeichen verwendest, musst du den Backslash excapen (\\1), dann geht's auch.
    Geändert von split (11.02.04 um 18:00 Uhr)
     

  3. #3
    Registriert seit
    Nov 2002
    Beiträge
    2.709
    Code :
    1
    2
    3
    
    $tags = implode("|", array('b', 'i', 'u'));
     
    $text = preg_replace("/(&lt;|<|\[)(" . $tags . ")(&gt;|>|\])(.+)\\1\/\\2\\3/", "<\\2>\\4</\\2>", $text);

    Funktioniert mit spitzen und eckigen Klammern und mit ge-htmlspecialchar`ten spitzen klammern. Hoffe ich...
     
    Im Ruhestand.

Ähnliche Themen

  1. Java Regex/Matcher Backreference
    Von gamp im Forum Java
    Antworten: 1
    Letzter Beitrag: 18.02.10, 20:45
  2. Antworten: 5
    Letzter Beitrag: 09.02.10, 10:55
  3. Antworten: 1
    Letzter Beitrag: 03.05.08, 13:16
  4. preg_match() mit Backreference
    Von tobee im Forum PHP
    Antworten: 3
    Letzter Beitrag: 30.03.07, 12:10
  5. RegExp Funktioniert nicht
    Von Prophet05 im Forum PHP
    Antworten: 7
    Letzter Beitrag: 30.10.05, 11:03