2016-12-20 21 views
5

mam 2 typy ciąg pierwszyJak znaleźć ciąg oddzielone „” w PHP

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

Drugi typ

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

chcę wyodrębnić4,6,8 z jednym kod, który działa dla całego przypadku:

Próbowałem:

$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); 
} 

ale działa tylko na pierwszym przypadku

Próbowałem również ten regex /.*?(\d+)$/ znalezienia ciąg, który kończy z numerami i testowałem go w tym miejscu, ale HTTP/1.1 kończy z numerami więc to nie był dobry pomysł

Odpowiedz

6

można wyodrębnić wszystkie numery oddzielone przecinkami po secondid= z

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

Zobacz regex demo.

Szczegóły:

  • (?:\G(?!\A),|secondid=) - mecz albo koniec poprzedniego udanego meczu a , (patrz \G(?!\A),) lub (|) do secondid= podciąg
  • \K - pomijać cały tekst dopasowany tak daleko
  • \d+ - 1 lub więcej cyfr

Zobacz 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

Cudowne rzeczy, wątpliwości, że można to zrobić lepiej. – JustBaron

2

Dla mnie to brzmi jak chcesz wyodrębnić cały podciąg 4,6,8. Jeśli tak, to po prostu użyj numeru capturing group, aby wyodrębnić część po secondid=, podobnie jak w this regex101 demo.

preg_match('/\bsecondid=([\d,]+)/', $string, $out) 
  • \b dopasowuje word boundary
  • (przechwytywania grupę) dla części wyodrębnić
  • \d jest short na cyfrze [0-9]

Zobacz swoje updated code sample at eval.in. W razie potrzeby nadal możesz return the exploded part.

+2

gdzie byłeś godzinę temu: P –

+0

Dzięki, to też działa. – parik