2017-11-16 14 views
0

Ich habe die HTML-Auszeichnung einer Webseite als $ Betreff. Ich verwende preg_match, um nach einer bestimmten Zeichenfolge zu suchen artist_x? und versuchen, nur den x-Anteil zurückzugeben. x kann eine beliebige Zahl von 1 bis 12 Ziffern sein. So würde das Muster/die alle folgenden übereinstimmen müssen:preg_match, um bestimmte Zeichenfolge zu finden, gefolgt von willkürlichen Zahlen

artist_1? 
artist_12345? 
artist_123456789012? 

... und bringen:

1 
12345 
123456789012 

... sind.

Dies ist die nächste, die ich mit oben kommen kann:

$pattern = '|[artist_][0-9]{1,12}|'; 
preg_match($pattern, $subject, $matches); 

Aber es funktioniert nicht richtig ... Es ist die Zeichenfolge zu finden, denn ich bin auf der Suche und auch die erwartete Anzahl der Rückkehr, aber die zurückgegebene Zahl noch hat den Unterstrich vorangestellt. Ich habe schon einige Lösungen ausprobiert, um so weit zu kommen, aber ich habe keine Ideen mehr.

Danke!

Antwort

0

Ich verstehe nicht wirklich, was Ihr Muster tun soll. Wie auch immer, das sollte funktionieren: Sie erfassen nur die Nummer, die Sie interessiert. $matches wird ein Array sein, das zuerst das ganze Match und dann die Gruppe enthält. So wird die erste Gruppe sein, was du willst.

$subject = "artist_3333"; 
$pattern = '/artist_(\d{1,12})/'; 
preg_match($pattern, $subject, $matches); 
echo($matches[1]); // 3333 

\d hier bedeutet dasselbe wie [0-9], es Ziffern

+1

Statt '+', 'Verwendung Spiele {1,12}' für die Ziffern, da OP hat die möglichen Längen – lxop

+0

Sie angegeben 're right, fixed – Axnyff

+0

Es funktioniert gut auf meinem localhost mit diesen 4 Zeilen, die Sie gepostet haben, aber es funktioniert nicht im Zusammenhang. Ich bin mir nicht sicher, was ich falsch mache. Ich benutze PHP file_get_contents, um das Markup von der [Seite] (https://www.reverbnation.com/imaginedragons) zu bekommen, aber wenn ich print_r auf $ Übereinstimmungen, ist es ein leeres Array. – cranjled

Verwandte Themen