2012-03-06 35 views
0

我具有以下設置的陣列如何使用RegEx

array('www.example.com/','www.example.com','www.demo.example.com/','www.example.com/blog','www.demo.com'); 

的,我希望得到所有元件,其匹配以下模式來獲得圖案匹配在PHP陣列,

$matchArray = array('*.example.com/*','www.demo.com'); 

預期結果如

array('www.example.com/','www.demo.example.com/','www.example.com/blog','www.demo.com'); 

謝謝:)

回答

1

這工作:

$valuesArray = array('www.example.com/','www.example.com','www.demo.example.com/','www.example.com/blog','www.demo.com'); 
    $matchArray = array('*.example.com/*','www.demo.com'); 
    $matchesArray = array(); 

    foreach ($valuesArray as $value) { 
     foreach ($matchArray as $match) { 

      //These fix the pseudo regex match array values 
      $match = preg_quote($match); 
      $match = str_replace('\*', '.*', $match); 
      $match = str_replace('/', '\/', $match); 

      //Match and add to $matchesArray if not already found 
      if (preg_match('/'.$match.'/', $value)) { 
       if (!in_array($value, $matchesArray)) { 
        $matchesArray[] = $value; 
       } 
      } 

     } 
    } 

    print_r($matchesArray); 

但我會建議改變你的比賽陣列的語法,這樣不需要的代碼的固定段是實際的正則表達式模式。