vino19: preg_replace pattern

Hallo Jungs und Mädels,

ich habe mir eine auto:replace Funktion geschrieben, die den Content meiner Seite ändern soll, sodass ich qusi selbsterfundene Tags benutzen kann:

function auto_replace($content) {  
	unset($search_for);  
	unset($replace_with);  
	$search_for = array();  
	$replace_with = array();  
	  
	$search_for[] = '/Lorem/i';  
	$replace_with[] = 'looooorem';  
	  
	$search_for[] = '/IPSUm/i';  
	$replace_with[] = 'zzzzzzzzzz';  
	  
	echo preg_replace($search_for, $replace_with, $content);  
}

Soweit funktioniert das auch. Jetzt möchte ich für $search_for und $replace_with ein design basteln, um folgendes umzuwandeln:

<info"Bitte nicht rennen">

in:

<div class="infodiv">Bitte nicht rennen</div>

also suchen nach <info"*">
und ersetzen durch <div class="infodiv">*</div>

Ist eigentlich ja ein relativ unkomplexes Suchmuster, aber ich habe jetzt schon soviele Versuche und keine hat funktioniert. Habt ihr einen Vorschlag, welche Syntax ich da für $search_for und $replace_with angeben muss?

  1. Habt ihr einen Vorschlag, welche Syntax ich da für $search_for und $replace_with angeben muss?

    Schon mal einen Blick in de preg_replace-Doku geworfen? ich würde auf einen Perl-kompatiblen regulären Ausdruck (PCRE) tippen :)

    Dein Suchmuster ist jedenfalls kein güliter Ausdruck - eine beliebige, nicht leere Zeichenkette unbekannter Länge suchst du mit (.+) bzw. eine leere oder beliebig lange mit (.*) - ebenso solltest du nicht gierig suchen - aktuell hast du nicht den case-insensitv-Modifikator im Einsatz.

    1. Also habe das jetzt so umgesetzt:

      $search_for[] = '/\<info\"(.*).(.*)\"\>/iU';  
      $replace_with[] = '<img src="images/layout/help.png" onmouseover="show_help_info(\'\1\')" onmouseout="hide_help_info(\'\1\')" class="help_info_pic"><span id="\1" class="help_info_span">\2</span>';
      

      Was sagst du dazu? Also funktionieren tut es (zumindest in meinem Browser). Siehst du noch irgendwelche Fehler?

      Hab auch schon gleich die nächste Frage:
      ich habe ja ein onmouseover-event eingefügt: show_help_info()

      Die Funktion sieht so aus:

      function show_help_info(div_id) {  
      	document.getElementById(div_id).style.visibility = 'visible';  
      	document.getElementById(div_id).style.top = 'xxx';  
      }
      

      Wie kann ich denn für xxx bei der top-Angabe den aktuellen x-Wert der Cursor-Position nehmen? Laut Google wäre das event.x, funktioniert aber nicht

      PS: Span ist fix positioniert.

      Vielen Dank für deine Hilfe

      1. $search_for[] = '/<info"(.).(.)">/iU';

        $replace_with[] = '<img src="images/layout/help.png" onmouseover="show_help_info('\1')" onmouseout="hide_help_info('\1')" class="help_info_pic"><span id="\1" class="help_info_span">\2</span>';

          
        
        > Was sagst du dazu? Also funktionieren tut es (zumindest in meinem Browser). Siehst du noch irgendwelche Fehler?  
          
        Kannst du ein paar von diesen Tags posten, auf die das Muster passen soll?
        
        1. Kannst du ein paar von diesen Tags posten, auf die das Muster passen soll?

          Gerne:

            
          <info"berlin.Berlin ist eine Stadt mit <b>vielen</b> Gesichtern">  
            
          <info"ausziehen.Macht man meistens vor dem <a href"google.de/schlafen">schlafen</a> gehen">
          
          1. Kannst du dich ggf. mal für EINEN Nick entscheiden - anna22, vino19, bert - wieviele denn noch?

            Gerne:

            <info"berlin.Berlin ist eine Stadt mit <b>vielen</b> Gesichtern">

            <info"ausziehen.Macht man meistens vor dem <a href"google.de/schlafen">schlafen</a> gehen">

              
              
            Dann ist dein Ausdruck fehlerhaft - er greift auf (.\*).(.\*) und auch höchst Unsinnig. den bezeichner mit . getrennt kannst du dir eigentlich sparen - this reicht hier völlig aus.
            
            1. Kannst du dich ggf. mal für EINEN Nick entscheiden

              sorry, ich bin in anderen Foren mit anderen Namen unterwegs und schmeiße die manchmal durcheinander. Werde mich hier mal registrieren, dann passiert das auch nicht mehr.

              Dann ist dein Ausdruck fehlerhaft - er greift auf (.*).(.*) und auch höchst Unsinnig. den bezeichner mit . getrennt kannst du dir eigentlich sparen - this reicht hier völlig aus.

              Den/die Satz/Sätze verstehe ich nicht. du meinst den Punkt in der Mitte soll ich anders bezeichnen?

              (.*)"(.*)
              so?

              1. Den/die Satz/Sätze verstehe ich nicht. du meinst den Punkt in der Mitte soll ich anders bezeichnen?

                (.*)"(.*)
                so?

                . ist in PCRE ein zeichen mit besonderer Bedeutung.

                Aber wie gesagt würde ich auf das Präfix vollständig verzichten - es ist unnötig.

                1. Aber wie gesagt würde ich auf das Präfix vollständig verzichten - es ist unnötig.

                  Brauche aber eine Angabe zu meiner Span-ID, sonst kann ich die nicht an das JS übergeben, um beim onmouseover das entsprechende span visible zu machen. Oder gibts dafür nen besseren weg?

                  1. Brauche aber eine Angabe zu meiner Span-ID, sonst kann ich die nicht an das JS übergeben, um beim onmouseover das entsprechende span visible zu machen. Oder gibts dafür nen besseren weg?

                    wie schon erwähnt: "this"

                    1. wie schon erwähnt: "this"

                      die funktion wird aber im <img> aufgerufen und <span> ist kein teil von img. Das erkennt der dann doch nicht.

                      1. die funktion wird aber im <img> aufgerufen und <span> ist kein teil von img. Das erkennt der dann doch nicht.

                        Durchs <http://de.selfhtml.org/javascript/objekte/node.htm@title=DOM zum span-Element hangeln> musst du dich dann natürlich schon noch.