Что такое регулярное выражение для решения этой проблемы?

У меня есть массив на PHP с URL-адресами, как показано ниже:

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

Как я могу выделить эти URL-адреса и нажать их на другой массив с помощью Regex:

 http://example.com/apps/1235554/ http://example.com/apps/126734 http://example.com/apps/2331234/ 

Должен быть выбран только URL-адрес с apps/{number}/ и apps/{number} .

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

или более ограничительным:

 ~apps/[0-9]+(/|$)~ 

для соответствия либо косой чертой, либо концом строки.

Предполагая, что вы не используете символ «/» в качестве символа разделителя регулярных выражений, чтобы игнорировать проблемы с экранированием, это будет делать трюк:

  "^http://example.com/apps/\d+/?$" 

Вы также можете сделать это, используя отрицательный lookahead, чтобы заменить все строки, которые не то, что вы хотите, с пустой строкой:

замещать

 http://example\.com/(?!apps/[0-9]+).* 

С

 '' 

^http://example\.com/apps/\d+\bapps затем слэш, затем некоторые цифры, а затем границы слова, т. е. не алфавитный символ.

Если вы хотите сохранить только URLS с / app / (некоторая цифра) и необязательно заканчивая косой чертой, вы можете использовать такой цикл:

 for ($i = count($urls); $i-->0 ;) { if (!preg_match('-/apps/\d+/?$-', $urls[$i])) unset($urls[$i]); } 

Он очищает ваш массив на месте, без необходимости использовать временный. Я предполагаю, что имя хоста не является постоянным, иначе вы можете изменить regexp с помощью:

 '-^http://www.example.com/apps/\d+/?$-' 

Я заменил стандартный / регулярный разделитель таким образом, чтобы мне не пришлось скрывать косые черты URL.