2016-12-20 11 views
5

tôi có 2 loại chuỗi là người đầu tiênLàm thế nào để tìm một chuỗi phân cách bằng '' trong PHP

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

loại thứ hai

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

tôi muốn trích xuất4,6,8 với một mã hoạt động cho tất cả các trường hợp

tôi đã thử

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

nhưng nó hoạt động chỉ dành cho trường hợp đầu tiên

tôi cũng đã cố gắng regex này /.*?(\d+)$/ cho việc tìm kiếm các chuỗi người kết thúc với con số và tôi đã thử nghiệm nó trong trang web này, nhưng HTTP/1.1 kết thúc với con số do đó nó không phải là một tốt ý tưởng

Trả lời

6

Bạn có thể trích xuất tất cả các con số bằng dấu phẩy sau secondid= với

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

Xem regex demo.

Chi tiết:

  • (?:\G(?!\A),|secondid=) - phù hợp với một trong hai phần cuối của trận đấu thành công trước đó và một , (xem \G(?!\A),) hoặc (|) một secondid= chuỗi
  • \K - bỏ qua toàn bộ văn bản phù hợp để xa
  • \d+ - 1 hoặc nhiều chữ số

Xem 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

Công cụ đáng yêu, nghi ngờ bạn có thể làm điều đó tốt hơn. – JustBaron

2

Đối với tôi này đọc như bạn muốn trích xuất toàn bộ chuỗi 4,6,8. Nếu vậy, tại sao không chỉ đơn giản sử dụng một capturing group để trích xuất một phần sau secondid= như trong this regex101 demo.

preg_match('/\bsecondid=([\d,]+)/', $string, $out) 
  • \b phù hợp với một word boundary
  • (chụp nhóm) cho phần để trích xuất
  • \d là một short cho chữ số [0-9]

Xem updated code sample at eval.in của bạn. Nếu cần, bạn vẫn có thể return the exploded part.

+2

bạn đã ở đâu một giờ trước: P –

+0

Cảm ơn, nó cũng hoạt động. – parik

Các vấn đề liên quan