Regex исправить это? [Расширение] - PullRequest
0 голосов
/ 17 июня 2010

Извините за избыточность, я должен был задать это в моем предыдущем вопросе здесь: Что такое регулярное выражение для решения этой проблемы?

Этот вопрос является расширением:

Из элементов массива ниже:

http://example.com/apps/1235554/
http://example.com/apps/apple/
http://example.com/apps/126734
http://example.com/images/a.jpg

Я выделяю apps/{number}/ и apps/{number}, используя:

foreach ($urls as $url)
{
    if (preg_match('~apps/[0-9]+(/|$)~', $url)) echo $url;
}

Теперь, как мне также нажать {number} в другой массив с тем же регулярным выражением?

Ответы [ 2 ]

1 голос
/ 17 июня 2010

preg_match() принимает массив в качестве третьего параметра, который будет содержать совпадения.Создайте группу захвата с (), и затем число будет содержаться в $matches[1]:

$numbers = array();

foreach ($urls as $url)
{
    $matches = array();
    if (preg_match('~apps/([0-9]+)~', $url, $matches)) { // note the "( )" in the regex
        echo $url;
        $numbers[] = $matches[1];
    }
}

FYI, $matches[0] содержит весь сопоставленный шаблон, как описано в документации.Конечно, вы можете назвать массив так, как вам нравится.

0 голосов
/ 17 июня 2010

Если целью является поиск URL-адресов, которые соответствуют цели, вместо этого можно использовать preg_grep():

$urls = array(
    'http://example.com/apps/1235554/',
    'http://example.com/apps/apple/',
    'http://example.com/apps/126734',
    'http://example.com/images/a.jpg',
);

$urls = preg_grep('!apps/(\d+)/?$!', $urls);
print_r($urls);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...