2016-07-27 11 views
0

Ich habe einige Probleme wurden mit regex Schreiben auf dieser Seite vorherigen Namen entsprechen: http://steamcommunity.com/id/TripleThreat/namehistoryRegex zur vorherigen Namen übereinstimmen

Um klar zu sein, möchte ich in einem Array die folgenden:

  • TripleThreat
  • [FD] TripleThreat.blyat

und so weiter ..

ich bereits versucht haben, die Regex zu schreiben, aber es war eine Katastrophe (Etwas, das ich mit Kampf)

Hier ist, was ich schrieb: ist

$page = file_get_contents(sprintf("http://steamcommunity.com/id/TripleThreat/namehistory")); 

preg_match_all("/<span class=\"historyDash\">-<\/span>((.|\n)*)<\/div>/", $page, $matches); 

foreach($matches[0] as $match) { 
    echo($match . "<br/>"); 
} 

Jede Hilfe sehr geschätzt :)

+0

Ich habe nach einer API gesucht, um die Daten abzurufen, aber nichts gefunden, Scraping ist die einzige Option, die es scheint. – SM9

Antwort

1

Sie kann die folgende Regex versuchen (die Übereinstimmung ist in der ersten einfangenden Gruppe):

"/<span class=\"historyDash\">-<\/span>\s*((?:[^\<]|\n)*?)\s*<\/div>/" 

Sehen Sie es am Regex101.

Die Änderungen, die ich gemacht: getrimmt Leerzeichen vor und nach dem \s*, änderte sich die .-[^\<] nur diejenigen zu wählen, die nicht Tag werden (das heißt, der richtige Text).


Hinweis: Wie @PedroLobito wies darauf hin, don't parse HTML with regex unless necessary. Verwenden Sie stattdessen a library to parse the DOM, wenn Sie können. Ich habe Ihnen nur ein einfaches Beispiel gegeben, um Ihre Arbeit zu erweitern, aber es ist vielleicht nicht die beste Lösung.

+1

Funktioniert perfekt, danke! – SM9

+0

@ SM9 Das ist gut zu wissen. Ich bin froh, dass ich geholfen habe! –

+1

Verwenden Sie nie Regex, um HTML zu analysieren, schlechtes Beispiel. –