[PERL] Vorkommen eines Strings in einem anderen String zählen

  • N'abend,

    Kurze Frage:
    Ich möchte folgendes realisieren:

    Wenn ein String ($text) die Zeichenkette: "http" nur einmal enthält, soll er ausgegeben werden.

    Also:

    $text = "http://test" -> wird ausgegeben
    $text = "http://test.php?url=http://perl" -> wird nicht ausgegeben
    $text = "http://test.php?url=http://perl?url=http://..." -> wird auch nicht ausgegeben und so weiter, also: Nur wenn die Zeichenkette "http" einmal vorkommt, darf sie ausgegeben werden.

    Wie realisier ich das und wo könnte ich weitere Informationen zu dem Thema bekommen (also: wie heißt diese Technik?). Dann müsste ich nicht jedesmal fragen, sondern könnte versuchen mich in die Materie einzulesen, bisher finde ich leider nicht die richtigen Keywords dafür.. ;)

    Gute Nacht.

  • also von pearl hab ich keine ahnung, aber ich würd suchen nach sowas wie substring, stringAt containsString, pregmatch oder sowas in der richtung suchen...
    gibt bestimmt irgendwo ne komplettreferenz im netz wie php.net, selfhtml und so sachen, da wirste bestimmt fündig

    sonst schreibste halt ne eigene funktion die mit ner regex überprüft ob der string da is, wenn ja schneideste den ersten gefundenen teil ab und prüfst den rest nochmal, wenn nichts gefunden wird, kannste wieder den original-string zurückgeben und hast die url :)

  • Danke für die Antwort.
    Hm, für ein einzelnes Zeichen habe ich folgendes gefunden:

    Code
    $string = "ThisXlineXhasXsomeXx'sXinXit":
        $count = ($string =~ tr/X//);
        print "There are $count X charcters in the string";

    Das funktioniert aber nur mit einem Buchstaben, für mein Vorhaben finde ich oft dieses:

    Code
    $string = "-9 55 48 -2 23 -76 4 14 -44";
        while ($string =~ /-\d+/g) { $count++ }
        print "There are $count negative numbers in the string";

    Nur wie kann ich das auf meine Thematik anwenden? Vorallem diesen Teil:

    Code
    $string =~ /-\d+/g

    :?

    Ich hoffe jemand kann mir helfen.


    EDIT:

    Habs nun gelöst, so funktioniert es:

    Code
    $count = "0";
        while ($string =~ /http/g) { $count++; }

    http://de.selfhtml.org/perl/sprache/regexpr.htm <- falls jemand ein ähnliches Problem hat, dort findet man die Beschreibungen der Zeichen :)

    Dankeschön an synaptichttps://www.forum-hilfe.de/member.php?u=7768:P

    2 Mal editiert, zuletzt von Breakdown (9. August 2009 um 15:25)

  • wobei in deinem Fall würde sich eine Liste auch anbieten, z.B. so:

    Code
    my @matches = ($string =~ m/http/g);

    Weil diese im skalaren Kontext die Anzahl der Elemente ausgibt und somit die $count Variable wegfallen würde ;)

    Gruß crAzywuLf :D