Gerd: Regulärer Ausdruck gesucht

Hi,

ich möchte gerne innerhalb eines Strings ausschließlich bei Vorkommen eines Links der Domain www.domain.de per regulärem Ausdruck aus

http://www.domain.de/verz/unterverz1/unterverz1a/datei.html

http://www.dmain.de/verz/script.php?u=1&d=datei

machen.

Wer weiß Rat?

Grüße, Gerd

  1. Hallo Gerd.

    ich möchte gerne innerhalb eines Strings ausschließlich bei Vorkommen eines Links der Domain www.domain.de per regulärem Ausdruck aus

    http://www.domain.de/verz/unterverz1/unterverz1a/datei.html

    http://www.dmain.de/verz/script.php?u=1&d=datei

    machen.

    Wer weiß Rat?

    Der PCRE-Evaluator vielleicht? Ich habe die simpelste Variante gewählt, da du nicht nanntest, was alles auftreten kann.

    Einen schönen Freitag noch.

    Gruß, Ashura

    --
    sh:( fo:} ch:? rl:( br: n4:~ ie:{ mo:| va:) de:> zu:} fl:( ss:) ls:[ js:|
    „It is required that HTML be a common language between all platforms. This implies no device-specific markup, or anything which requires control over fonts or colors, for example. This is in keeping with the SGML ideal.“
    [HTML Design Constraints: Logical Markup]
  2. morgens,

    ich möchte gerne [...] per regulärem Ausdruck aus
    http://www.domain.de/verz/unterverz1/unterverz1a/datei.html
    http://www.dmain.de/verz/script.php?u=1&d=datei
    machen.

    Ja, und warum machst du es nicht einfach? Wenn man einen String (der ja Bestandteil eines anderen strings sein kann) durch irgendwas anderes ersetzen möchte, gilt in PHP zunächst preg_replace als Mittel der Wahl. Du kannst das natürlich noch von einer Bedingung abhängig machen:
      if (Vorkommen eines Links der Domain www.domain.de) {
        $Suchmuster = http://www.domain.de/verz/unterverz1/unterverz1a/datei.html;
        $Ersatzmuster = http://www.dmain.de/verz/script.php?u=1&d=datei;
        $string = beliebiger String;
        $korrigierter_string = preg_replace($Suchmuster,$Ersatzmuster,$string);
        echo $korrigierter_string;
      }
    Schematisch würde ich vermutlich in dieser Weise vorgehen.

    Grüße aus Berlin

    Christoph S.

    --
    Visitenkarte
    ss:| zu:) ls:& fo:) va:) sh:| rl:|
    1. gudn tach Christoph!

      ich möchte gerne [...] per regulärem Ausdruck aus
      http://www.domain.de/verz/unterverz1/unterverz1a/datei.html
      http://www.dmain.de/verz/script.php?u=1&d=datei
      machen.

      Ja, und warum machst du es nicht einfach?

      vermutlich weil er nicht weiss, wie's geht. sonst wuerde er ja nicht fragen.

      Wenn man einen String (der ja Bestandteil eines anderen strings sein kann) durch irgendwas anderes ersetzen möchte, gilt in PHP zunächst preg_replace als Mittel der Wahl.

      jein.
      http://de2.php.net/manual/en/function.str-replace.php@str_replace sollte manchmal bevorzugt werden:
      "If you don't need fancy replacing rules (like regular expressions), you should always use this function instead of ereg_replace() or preg_replace()."
      und substr_replace gibt's da auch noch.

      $Suchmuster = http://www.domain.de/verz/unterverz1/unterverz1a/datei.html;
          $Ersatzmuster = http://www.dmain.de/verz/script.php?u=1&d=datei;

      nur eine kleinigkeit: da fehlen die anfuehrungszeichen. vielleicht war es absicht. aber ein anfaenger wuerde daraus wohl ueberhaupt nicht schlau werden.

      $korrigierter_string = preg_replace($Suchmuster,$Ersatzmuster,$string);

      Schematisch würde ich vermutlich in dieser Weise vorgehen.

      auch wenn's nur schematisch ist, fehlt hier die information, dass z.b.

      preg_replace("http://www.domain.de/verz/unterverz1/unterverz1a/datei.html",$Ersatzmuster,$string);

      nicht das bringt, was der poster moechte. punkte (.) bedeuten beispielsweise "(fast) beliebiges zeichen".

      ein verweis auch das php-manual (preg_replace) waere imho sinnvoller gewesen. dort sind auch gleich infos zur regexp-syntax.

      prost
      seth

      1. hallo seth,

        nur eine kleinigkeit: da fehlen die anfuehrungszeichen. vielleicht war es absicht. aber ein anfaenger wuerde daraus wohl ueberhaupt nicht schlau werden.

        Nicht unbedingt Absicht - aber ich habe als Beispiel für die Bedingung ja auch einen Klammerausdruck genommen, der in dieser Form nicht praktikabel ist.

        ein verweis auch das php-manual (preg_replace) waere imho sinnvoller gewesen. dort sind auch gleich infos zur regexp-syntax.

        Den Verweis hatte ich angegeben.

        Grüße aus Berlin

        Christoph S.

        --
        Visitenkarte
        ss:| zu:) ls:& fo:) va:) sh:| rl:|
        1. gudn tach Christoph!

          ein verweis auch das php-manual (preg_replace) waere imho sinnvoller gewesen. dort sind auch gleich infos zur regexp-syntax.

          Den Verweis hatte ich angegeben.

          huch, tatsaechlich, und ich hab's sogar zitiert. hmm, uebersehen...
          und "title=" habe ich auch noch vergessen, trotz vorschau, tss.

          danke fuer den hinweis. waren meine finger wohl schneller als der kopf.

          prost
          seth

  3. gudn tach!

    ich möchte gerne innerhalb eines Strings ausschließlich bei Vorkommen eines Links der Domain www.domain.de per regulärem Ausdruck aus

    http://www.domain.de/verz/unterverz1/unterverz1a/datei.html

    http://www.dmain.de/verz/script.php?u=1&d=datei

    machen.

    was genau moechtest du?
    soll die domain ersetzt werden oder war das nur ein tippfehler?
    sind die unterverzeichnisse durchnummeriert und soll diese nummerierung in u=1, u=2 usw. bis u=? verpackt werden?
    soll der dateiname ohne erweiterung extrahiert und ebenfalls uebergeben (d=dateiname) werden?
    sonst noch was? was ist mit dem unterverzeichnis 1a?
    praezisiere mal, was du machen moechtest.
    wie weit bist du schon denn schon gekommen?

    prost
    seth

    1. gudn tach!

      ich möchte gerne innerhalb eines Strings ausschließlich bei Vorkommen eines Links der Domain www.domain.de per regulärem Ausdruck aus

      http://www.domain.de/verz/unterverz1/unterverz1a/datei.html

      http://www.dmain.de/verz/script.php?u=1&d=datei

      machen.

      was genau moechtest du?
      soll die domain ersetzt werden oder war das nur ein tippfehler?

      Hallo Seth,

      oops. Die Domein soll nicht ersetzt werden, das war tatsächlich ein Tippfehler.

      sind die unterverzeichnisse durchnummeriert und soll diese nummerierung in u=1, u=2 usw. bis u=? verpackt werden?

      Exakt. So ist es. Für mich wichtig ist lediglich, daß in der zu suchenden URL das im Unterverzeichnis "verz" ein Unterverzeichnis "unterverz""n" vorkommt. Die Ziffer "n" brauch ich, denn die wird für meine Variable "u" genommen.
      Und der Dateiname wird meine Variable "d" gebraucht.
      Das Unterverzeichnis "1a" entfällt hingegen ersatzlos.

      wie weit bist du schon denn schon gekommen?

      Es ist unproblematisch, alle möglichen Strings zu suchen und zu ersetzen. Probleme macht mir, daß ich Infos brauche, die noch verwendet werden.
      Auch dazu hab ich einige Tuts gefunden. Passen aber alle nicht so richtig.
      Weiß nicht, vielleicht würde ich über 1000 Ecken auch nach Rom kommen. Den String suchen, finden und mit "explode" in zig Bestandteile zerstückeln und nach meinem Muster wieder zusammensetzen, so würd ich es machen.

      Frage mich aber, ob es nicht auch in einem ein- oder zweizeiler geht?

      Grüße, Gerd

      prost
      seth

      1. gudn tach!

        wie weit bist du schon denn schon gekommen?

        Es ist unproblematisch, alle möglichen Strings zu suchen und zu ersetzen. Probleme macht mir, daß ich Infos brauche, die noch verwendet werden.

        stichwort: backreferences.

        Weiß nicht, vielleicht würde ich über 1000 Ecken auch nach Rom kommen. Den String suchen, finden und mit "explode" in zig Bestandteile zerstückeln und nach meinem Muster wieder zusammensetzen, so würd ich es machen.

        geht auch.
        mit regexp geht sowas allerdings oft leichter. ist aber auch geschmacks-/uebungssache

        Frage mich aber, ob es nicht auch in einem ein- oder zweizeiler geht?

        es geht.
        ungefaehr so:

          
        $str_mit_altem_url='foo http://www.domain.de/verz/unterverz1/unterverz1a/datei.html bar';  
        $str_mit_neuem_url=preg_replace('~/verz/unterverz(\d+)/[^/]+/([^/]+)\.html\b~', '/verz/script.php?u=$1&d=$2', $str_mit_altem_url);
        

        du solltest es allerdings noch genauer an deine url-struktur anpassen.

        prost
        seth

      2. Hallo,

        Den String suchen, finden und mit "explode" in zig Bestandteile zerstückeln und nach meinem Muster wieder zusammensetzen, so würd ich es machen.

        nichts spricht dagegen:

        $url='http://www.domain.de/verz/script.php?u='.substr(($d=substr($a[$i],$b)),0,strpos($d,'/')).'&d='.substr($d,strrpos($d,'/')+1,strrpos($d,'.')-strlen($d));

        Gruß aus Berlin!
        eddi

        1. den Rest sollte ich eventuell auch posten, 'tuschlidung:

          $a=array(); // Datenfeld aus den URLs  
          $z=array();  
          $c=count($a);  
          $b=strlen('http://www.domain.de/verz/unterverz');  
          for($i=0;$i<$c;$i++){  
           $a[$i]='http://www.domain.de/verz/script.php?u='.substr(($d=substr($a[$i],$b)),0,strpos($d,'/')).'&amp;d='.substr($d,strrpos($d,'/')+1,strrpos($d,'.')-strlen($d));  
          }
          

          Gruß aus Berlin!
          eddi

          1. Hi Eddi,

            Oops. Da brauch ich aber mal eben ein paar Minütchen Ruhe, um mir das zu vergegenwärtigen.
            Wenn ich nicht weiterkomme, erzählst Du mir dann auch, was das übersetzt heißt?
            Dank Dir erstmal, find ich klasse, Deine Hilfestellung.

            Gruß, Gerd

            den Rest sollte ich eventuell auch posten, 'tuschlidung:

            $a=array(); // Datenfeld aus den URLs

            $z=array();
            $c=count($a);
            $b=strlen('http://www.domain.de/verz/unterverz');
            for($i=0;$i<$c;$i++){
            $a[$i]='http://www.domain.de/verz/script.php?u='.substr(($d=substr($a[$i],$b)),0,strpos($d,'/')).'&amp;d='.substr($d,strrpos($d,'/')+1,strrpos($d,'.')-strlen($d));
            }

            
            >   
            >   
            > Gruß aus Berlin!  
            > eddi  
            >