2016-12-20 2 views
5

Ich habe 2 Arten von String den erstenWie ein String, getrennt durch '' in PHP

"/css/style.min.css HTTP/1.1" 200 7832 index.php?firstId=5&secondid=4,6,8 HTTP/1.1" 

des zweiten Typ

"/css/style.min.css HTTP/1.1" 200 7832 /index.php?firstId=123&secondid=4,6,8" "Mozilla/5.0 

i4,6,8 mit einer extrahieren möge finden Code wer arbeitet für den ganzen Fall

ich versuchte

$line = '/index.php?firstId=123&secondid=4,6,8" "Mozilla/5.0'; 
$nbpers = findme($line, 'secondid=', '"') ; 

function findme($string, $start, $end){ 
    $string = ' ' . $string; 
    $ini = strpos($string, $start); 
    if ($ini == 0) return ''; 
    $ini += strlen($start); 
    $len = strpos($string, $end, $ini) - $ini; 
    return substr($string, $ini, $len); 
} 

aber es funktioniert nur für den ersten Fall

Ich habe versucht, auch diese regex /.*?(\d+)$/ für die Zeichenfolge zu finden, die mit Zahlen enden und ich getestet es auf dieser Seite, aber HTTP/1.1 endet mit Zahlen, so dass es nicht gut war Idee

Antwort

6

Sie können extrahieren Sie alle durch Komma getrennte Zahlen nach secondid= mit

(?:\G(?!\A),|secondid=)\K\d+ 

die regex demo See.

Einzelheiten:

  • (?:\G(?!\A),|secondid=) - entweder das Ende der letzten erfolgreichen Spiel passen und einen , (siehe \G(?!\A),) oder (|) eine secondid= Teilzeichenfolge
  • \K - lassen Sie den gesamten Text abgestimmt, weit
  • \d+ - 1 oder mehr Ziffern

Siehe PHP demo:

$s = '"/css/style.min.css HTTP/1.1" 200 7832 /index.php?firstId=123&secondid=4,6,8" "Mozilla/5.0'; 
preg_match_all('~(?:\G(?!\A),|secondid=)\K\d+~', $s, $results); 
print_r($results[0]); 
+1

Schöne Sachen, Zweifel, dass Sie es besser machen könnten. – JustBaron

2

Für mich liest sich wie Sie die volle Teilzeichenfolge 4,6,8 extrahieren möchten. Wenn ja, warum nicht einfach eine capturing group verwenden, um das Teil nach secondid= wie in this regex101 demo zu extrahieren.

preg_match('/\bsecondid=([\d,]+)/', $string, $out) 
  • \b entspricht einem word boundary
  • (Erfassung Gruppe) für Teil ein short zu extrahieren
  • \d Ziffer ist [0-9]

Ihre updated code sample at eval.in. Bei Bedarf können Sie immer noch return the exploded part.

+2

wo warst du vor einer Stunde: P –

+0

Danke, es funktioniert auch. – parik

Verwandte Themen