Как получить сопоставление с образцом в массиве php с помощью RegEx - PullRequest
0 голосов
/ 06 марта 2012

У меня есть следующий набор массива

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');

Ожидаемый результат как

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

Спасибо:)

Ответы [ 2 ]

1 голос
/ 06 марта 2012

Это работает:

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

Но я бы порекомендовал изменить синтаксис вашего массива совпадений на фактические шаблоны регулярных выражений, чтобы раздел кода исправления не требовался.

0 голосов
/ 06 марта 2012
/\w+(\.demo)?\.example\.com\/\w*|www\.demo\.com/

регулярное выражение

...