Marcus Hammel: Variable definieren

Hallo,

Ich habe den folgenden Code-Schnipsel:

if ($content =~ /<acronym/i) {
      if ($content =~ /<title>([^<>]+)</title>/i) {
        $seitentitel = $1;
      }

Er definiert den Inhalt von <title>...</title> als Variable.
Das funktioniert natürlich auch.

Nur befindet sich bei mir der Titel nicht in <title> sondern in
$title     = "....";

Ich habe schon versucht das Skript ganz einfach nach meinem Wissen umzustellen:
statt ($content =~ /<title>([^<>]+)</title>/i)
das hier zu setzen: ($content =~ /$title = "([^<>]+)";/i)

Funktioniert aber nicht, da dort auch andere Werte übergeben werden, die in den Webseiten noch kommen z.B.     $description = "..."; oder $keywords = "...";

Kann mir da jemand helfen den korrekten Ausdruck zu finden?

MfG,
Marcus

  1. gudn tach!

    statt ($content =~ /<title>([^<>]+)</title>/i)
    das hier zu setzen: ($content =~ /$title = "([^<>]+)";/i)

    eher ($content =~ /\$title = "([^"]+)";/i)
    siehe auch perlrequick.

    Funktioniert aber nicht, da dort auch andere Werte übergeben werden, die in den Webseiten noch kommen z.B.     $description = "..."; oder $keywords = "...";

    ¿hae?

    prost
    seth

    1. Hi,

      Hier ersteinmal die beiden kompletten Skripte.
      http://test.hellfirez.de/search_acronyms.txt
      http://test.hellfirez.de/glossar.txt

      Der von dir erstellte Teil
      ($content =~ /$title = "([^"]+)";/i)

      Funktioniert zwar, aber es wird nun in jeder Seite der selbe Titel genutzt, aber nicht für jede Seite eine eigene...

      Wirklich komisch.

      1. gudn tach!

        mit "¿hae?" meinte ich: "ich habe das nicht verstanden. was hast du ueberhaupt vor?"

        http://test.hellfirez.de/search_acronyms.txt
        http://test.hellfirez.de/glossar.txt

        och, so viel code...

        [...] Funktioniert zwar, aber es wird nun in jeder Seite der selbe Titel genutzt, aber nicht für jede Seite eine eigene...

        also... ¿hae? ;-)

        prost
        seth

        1. Es ist ganz einfach. Mit search_acronyms.pl erstellt man einen Index aller Seite einer Webseite, die Acronyme enthalten.
          Es werden dann die Acronyme, Weburl, Titel etc. für jedes Acronym einer jeden Seite ermittelt und in eine Textdatei geschrieben.

          Mit glossar.pl, wird aus der Textdatei dann entsprechend eine HMTL Seite gerendert.
          Aber uns interessiert nur die search_acronyms.pl. Da jede meiner Internetseiten mittlerweile PHP nutzen zum einbinden von Headern etc. steht am Anfang einer jeden Seite ein folgender Block:

          <?php
              // Variabeln
              $title     = "...";
              $description = "...";
              $keywords = "...";
          ?>

          es wird dann eine entsprechende Headerdatei eingelesen, die die variablen einbindet.

          Das search_acronyms.pl-Skript setzt das PHP nicht um, spricht es sieht nicht den eingebundenen Header, sondern nur die includes, deshalb funktioniert auch das mit dem title nicht, weil das ja erst eingebunden wird.

          Desahlb muss ich irgendwie dem Skript begreiflich machen, dass er die $title     = "..."; auslesen soll...

          1. gudn tach Marcus!

            Mit search_acronyms.pl erstellt man einen Index aller Seite einer Webseite, die Acronyme enthalten. [...]

            ah, verstehe. tolle wurst!

            <?php
                // Variabeln
                $title     = "...";
                $description = "...";
                $keywords = "...";
            ?>

            ahaa! dann muesstest du den code-schnipsel, den ich postete noch ein klein wenig abaendern.

            und wenn du dir ein wenig zeit genommen haettest, den von mir verlinkten perl-kram zu regulaeren ausdruecken zu lesen, haettest du deinen fehler schon selbst gefunden und ausgebessert und haettest ggf. hier noch mal gefragt, ob dein neuer ansatz auch richtig waere.

            in dem von dir geposteten quellcode lautet die betreffende zeile

            $content =~ /\$title =" ([^"]+);/i
                                ^^^^ dort gehst du davon aus, dass genau ein leerzeichen zwischen "title" und "=" ist. ausserdem erwartest du nach dem anfuehrungszeichen fuer den titel ein leerzeichen.
            ach ja, und die abschliessenden anfuehrungszeichen fehlen.

            lies dir mal den perl-kram zu regulaeren ausdruecken durch (ist auch bloss die kurze fassung; ausfuehrlicher ist z.b. perldoc perlre).

            $content =~ /\$title *= *"([^"]+)";/i

            wird dir vielleicht schon weiterhelfen. falls noch tabulatoren auftreten koennen, sollte

            $content =~ /\$title[ \t]*=[ \t]*"([^"]+)";/i

            abhilfe schaffen.
            und weil es ja auch mal sein kann, dass ein titel anfuehrungszeichen enthaelt, also $title="ich sag: \"tolle wurst!\"";, wuerde ich eher empfehlen:

            $content =~ /\$title[ \t]*=[ \t]*"(.+?)";/i

            und falls auch mal ' statt " als string-begrenzer verwendet werden:
            $content =~ /\$title[ \t]*=[ \t]*["'](.+?)["'];/i

            prost
            seth

            1. Vielen lieben Dank!