У меня есть массив на 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+\b
– apps
затем слэш, затем некоторые цифры, а затем границы слова, т. е. не алфавитный символ.
Если вы хотите сохранить только 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.