2011-11-17 4 views
9

संभव डुप्लिकेट:मैं preg_match से केवल नामित कैप्चर कैसे प्राप्त कर सकता हूं?

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

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

print_r($matches); 

यह प्रिंट:

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

मैं कैसे जीई कर सकते हैं
how to force preg_match preg_match_all to return only named parts of regex expression

मैं इस स्निपेट यह टी बस वापस जाने के लिए:

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

परिणाम सरणी की छानने का सहारा के बिना:

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

उत्तर

6

preg_match हमेशा संख्यात्मक अनुक्रमित परवाह किए बिना वापस आ जाएगी नामित कब्जा समूहों की

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

फिल्टर, यकीन है कि के कुछ प्रकार।

+5

'foreach { अगर (is_int ($ ट)) { सेट नहीं ($ मैचों [$ (k $ => $ वी के रूप में $ मैचों) कश्मीर]); } } 'संख्यात्मक कुंजी को पट्टी करने और केवल नामित रखने के लिए। – Radu

संबंधित मुद्दे