dey: preg_*, ich raffs nicht

aber ich bau drauf, daß ihr es könnt

Hallo,

ich versuche den text zwischen 2 ähnlichen Schlüsseln zu finden.
als Basis hatte ich das Beispiel von de.php.net gewählt:

  
<?php  
// den Hostnamen aus URL holen  
preg_match("/^(http:\/\/)?([^\/]+)/i",  
    "http://www.php.net/index.html", $treffer);  
$host = $treffer[2];  
  
// die letzten beiden Segmente aus Hostnamen holen  
preg_match("/[^\.\/]+\.[^\.\/]+$/", $host, $treffer);  
echo "Der Domänen-Name lautet: {$treffer[0]}\n";  
?>  

und daraus dies gemacht:

  
preg_match("/^({php:})?([^{:php}]+)/i",  
    "{php:}url{:php}", $treffer);  
print_r ($treffer)  ;  

Das funktioniert soweit. Jetzt sieht der zu filternde String aber so aus:
"viel text vorher{php:}urlviel text hinterher"
und da versagt das Beispiel dann.

Wie muß der Filter lauten, damit ich in der Variable $treffer tatsächlich irgendwo "url" stehen habe?

bydey

--
-- bydey ist die Signatur und Verabschiedung, nicht der Nick --
-- Navigate all your PHP web projects with  PHP Project Browser--
  1. Hi,

    als Basis hatte ich das Beispiel von de.php.net gewählt:

    dieses Beispiel passt nicht auf Deinen Anwendungsfall.

    preg_match("/^({php:})?([^]+)/i",

    Erkläre mal bitte Zeichen für Zeichen alles, was zwischen den beiden Slashes steht.

    Das funktioniert soweit.

    Tut es nicht. Es liefert völlig willkürliche Ergebnisse.

    Jetzt sieht der zu filternde String aber so aus:
    "viel text vorher{php:}urlviel text hinterher"

    Lass ihn mal "{php:}http://..." lauten, da versagt das Beispiel auch. Grund: Die von Dir verfasste RegExp hat überhaupt nichts mit Deinem Use Case zu tun.

    Cheatah

    --
    X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
    X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
    X-Will-Answer-Email: No
    X-Please-Search-Archive-First: Absolutely Yes
    1. Hallo,

      Lass ihn mal "{php:}http://..." lauten, da versagt das Beispiel auch. Grund: Die von Dir verfasste RegExp hat überhaupt nichts mit Deinem Use Case zu tun.

      Ich hatte ja auch nicht behauptet zu wissen, was ich da tue. Ich hatte mein Problem: finde irgenwas zwischen {php:} und .
      Das Beispiel schien mir in die richtige Richtung zu gehen. Beim nächsten Test war es dann vorbei.
      Ich verstehe das mit den regulären Ausdrücken NICHT! Versuche aber anhand eines konkrten Problems den Einstieg.

      Wie komme ich denn jetzt meiner Problemslösung näher?

      bydey

      --
      -- bydey ist die Signatur und Verabschiedung, nicht der Nick --
      -- Navigate all your PHP web projects with  PHP Project Browser--
      1. Hi,

        Ich hatte ja auch nicht behauptet zu wissen, was ich da tue. Ich hatte mein Problem: finde irgenwas zwischen {php:} und .

        Du hast ein weiteres Problem: Du weißt nicht, was Du tust. Bei diesem Problem helfe ich Dir gerne.

        Ich verstehe das mit den regulären Ausdrücken NICHT! Versuche aber anhand eines konkrten Problems den Einstieg.
        Wie komme ich denn jetzt meiner Problemslösung näher?

        Erkläre Zeichen für Zeichen Deine RegExp.

        Cheatah

        --
        X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
        X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
        X-Will-Answer-Email: No
        X-Please-Search-Archive-First: Absolutely Yes
        1. Hallo,

          Du hast ein weiteres Problem: Du weißt nicht, was Du tust. Bei diesem Problem helfe ich Dir gerne.

          Richtig. Ich versuche, daß Konzept der Regexp zu verstehen, tue es aber

          Erkläre Zeichen für Zeichen Deine RegExp.

          Ich ahnte, daß es so weiter geht!
          Ich suche "Variabler Text vor dem ersten Schlüssel", "Schlüssel1", "gesuchter Variabler Text", "Schlüssel2", "Variabler Text nach dem zweiten Schlüssel"
          und mir fehlt jetzt komplett der Einstieg.
          Mir ist völlig klar, daß es aus der Dokumentation von Selfhtml hervorgehen sollte, tut es für mich aber nicht!

          bydey

          --
          -- bydey ist die Signatur und Verabschiedung, nicht der Nick --
          -- Navigate all your PHP web projects with  PHP Project Browser--
          1. Hallo,

            bin jetzt einen Schritt weiter:

              
            preg_match("/\{php:\}.*\{:php\}/",  
                "text davor{php:}./verz1/verz2/datei.php{:php}text danach", $treffer);  
            print_r ($treffer)  ;  
            
            

            ergibt:
            Array ( [0] => {php:}./verz1/verz2/datei.php )

            Wie kann ich jetzt noch die {php} in diesem Schrit wegbekommen. Es ist mir schon klar, daß ich jetzt ein *replace anwenden kann. Ich hätte es allerdings gerne alles mit einem einzigen preg_match gelöst.

            bydey

            --
            -- bydey ist die Signatur und Verabschiedung, nicht der Nick --
            -- Navigate all your PHP web projects with  PHP Project Browser--
          2. Hi,

            Erkläre Zeichen für Zeichen Deine RegExp.
            Ich ahnte, daß es so weiter geht!

            und das tut es solange, bis Du die RegExp Zeichen für Zeichen erklärst ;-)

            Ich suche [...]

            Und Du hast etwas gefunden, dass Du nicht verstehst. Die beste Methode, um etwas zu verstehen zu lernen, ist es anderen zu erklären.

            und mir fehlt jetzt komplett der Einstieg.

            Erkläre die RegExp, die Du gefunden hast.

            Mir ist völlig klar, daß es aus der Dokumentation von Selfhtml hervorgehen sollte, tut es für mich aber nicht!

            Wenn Du beim Versuch, die RegExp zu erklären, an einem Zeichen nicht weiter kommst, dann können wir darauf eingehen.

            bin jetzt einen Schritt weiter:

            Gut, dann kannst Du auch dies Zeichen für Zeichen erklären. Zusätzlich.

            Cheatah

            --
            X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
            X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
            X-Will-Answer-Email: No
            X-Please-Search-Archive-First: Absolutely Yes
            1. Hallo,

              danke, du hast mir NICHT geholfen!
              Es könnte sich einem ja jetzt der Gedanke aufdrängen, daß deine Methode erfolgreich war?! Ist sie allerdings nicht! Warum?
              Ich habe mein Problem zumindest so weit gelöst, daß es mein Testkriterium (text davor{php:}./verz1/verz2/datei.phptext danach) erfüllt.
              Ich verstehe auch zum Teil, was ich da tue. Aber sicher bin ich mir nicht, da es sich einzig und allein um Trial'n error handelte, was mitnichten einer Lösungsfindung noch verstehen nahe kommt, sondern eher "es reicht genau über diese Hürde.

              preg_match("/{php:}(.*){:php}/",
                  "text davor{php:}./verz1/verz2/datei.phptext danach", $treffer);
              print_r ($treffer)  ;

              ->Array ( [0] => {php:}./verz1/verz2/datei.php [1] => ./verz1/verz2/datei.php )

              Ob dies über jeden Zweifel erhaben ist bleibt abzuwarten. Genau dafür fehlt mir der Blick, weil ich eben kaum verstanden habe, was ich getan habe.

              Gut, dann kannst Du auch dies Zeichen für Zeichen erklären. Zusätzlich.

              Dies ist kein hilfreicher Hinweis. Du erklärst mir nur was ich schon weiß und selbst das nur mit Andeutungen.
              Hilfreich wäre gewesen, wenn du mir eine Stück Teillösung als Gedankenansatz gegeben hättest. Deine Lehrmethoden sind selbst bei Erfolg frustierend, aber das mußt du dir ja ständig in den Cheatah-ist-arraogant-Jammerposts anhören.

              bydey

              --
              -- bydey ist die Signatur und Verabschiedung, nicht der Nick --
              -- Navigate all your PHP web projects with  PHP Project Browser--