2011-11-17 11 views
9

thể trùng lặp:
how to force preg_match preg_match_all to return only named parts of regex expressionLàm cách nào để chỉ nhận được các ảnh chụp được đặt tên từ preg_match?

Tôi có đoạn này:

$string = 'Hello, my name is Linda. I like Pepsi.'; 
$regex = '/name is (?<name>[^.]+)\..*?like (?<likes>[^.]+)/'; 

preg_match($regex, $string, $matches); 

print_r($matches); 

in này:

Array 
(
    [0] => name is Linda. I like Pepsi 
    [name] => Linda 
    [1] => Linda 
    [likes] => Pepsi 
    [2] => Pepsi 
) 

Làm thế nào tôi có thể ge t nó để trở về chỉ:

Array 
(
    [name] => Linda 
    [likes] => Pepsi 
) 

Nếu không phải dùng đến lọc của mảng kết quả:

foreach ($matches as $key => $value) { 
    if (is_int($key)) 
     unset($matches[$key]); 
} 

Trả lời

6

preg_match sẽ luôn luôn trở lại các chỉ số số bất kể nhóm bắt tên

3
return array(
    'name' => $matches['name'], 
    'likes' => $matches['likes'], 
); 

Một số loại lọc, chắc chắn.

+5

'foreach (diêm $ như $ k => $ v) { if (is_int ($ k)) { unset ($ trận [$ k]); } } 'để loại bỏ các phím số và chỉ giữ các phím được đặt tên. – Radu