Dies ist ein komisches Problem, das ich angetroffen habe (und wahrscheinlich schon gesehen habe, aber nie beachtet habe).Wie bekomme ich eine Regex, um am Anfang einer Zeichenkette zu beginnen?
Hier ist der Kern des Codes:
my $url = 'http://twitter.com/' . $handle;
my $page = get($url);
if($page =~ m/Web<\/span>\s*<a href=\"(.+?)\"/gi) {
$website = $1;
}
if($page =~ m/follower_count\" class=\"stats_count numeric\">(.+?)\s*</g) {
$num_followers = $1;
}
Es wird eine twitter url und tut ein bisschen regex die Anzahl der Anhänger und die Website des Benutzers zu erfassen. Dieser Code funktioniert tatsächlich gut. Wenn Sie jedoch die Bestellung wechseln und nach der Website suchen, NACHDEM Sie nach einem Follower suchen, wird die Website leer angezeigt. Wie es sich herausstellt, wenn Sie eine Zeichenfolge regexen, scheint es, den Speicherort der letzten Übereinstimmung zu speichern. Im HTML-Format wird die Anzahl der Follower nach der Anzeige der Website angezeigt. Wenn Sie den Follower-Count-Regex zuerst tun, ist es so, als ob er den Regex der Website startet, wo der Follower-Count endet (wie ein Index-Verweis auf den String).
Was mich verblüfft ist, dass ich den "g" -Operator am Ende habe, was "global" bedeutet, wie in "Suche die Zeichenfolge global ... von Anfang an".
Fehle ich hier etwas? Ich kann nicht herausfinden, warum es die letzte Regex-Position auf der Saite wieder aufnimmt (wenn das Sinn macht).
könnten Sie die 2 Beispiele von Textzeilen einschließen, die Sie die Regex bitte anwenden – DaveC
Dies wurde beantwortet, aber 2 kleinere Klarstellungen: 1- mit "g" in einem s/etwas/somethingselse/g; ist notwendig, um alle Vorkommen zu ersetzen, ja? 2- Der "m" Operator, den ich in meinem obigen Beispielcode habe, ist nicht notwendig. – Jeff
1. ja, 's /// g' ersetzt global, während' s /// 'einen einzelnen ersetzt. 2. ja. du brauchst * nur * 'm', wenn du verschiedene Klammern verwendest:' m (Muster) 'oder' m [Muster] 'oder so ähnlich. –