2015-09-11 3 views
-2

Я пытаюсь получить часть моего url с помощью PHP preg_match, но он не работает. Я следовал инструкциям, но не повезло.PHP preg_match, чтобы получить часть моего url

Это то, что у меня есть до сих пор.

$url = 'http://chris.mydomain.com/d/3542re6s/somthing.html'; 
$pattern = '/\/\/(sub1\.)?mydomain.com\/(\d+)($|\/)/'; 
preg_match($pattern, $url, $matches); 
if (count($matches)){ 
    return $matches[2]; 
} 

Я также нуждаюсь в этом, чтобы проверить только для chris, terry и jack.

ОБНОВЛЕНО:

например: chris.mydomain.com terry.mydomain.com jack.mydomain.com

И мне нужно, чтобы получить второй запрос

например:

chris.mydomain.com/d/3542re6s/somthing.html

вернет

3542re6s

Любая помощь очень ценится.

Заранее спасибо C

+1

Ваше регулярное выражение не позволяет использовать подкаталог '/ d /'. – Barmar

+0

Попробуйте сначала разобрать URL-адрес, было бы легче сыграть с ним http://php.net/manual/en/function.parse-url.php – silver

+0

Вы можете разрешить под 1,2, или 3 с 'sub [ 123] '. Также '\ d +' - это только числа, вы также хотите, чтобы буквы, нет? Это то, что вы ищете https://regex101.com/r/iR1fC1/1? – chris85

ответ

3

Регулярное выражение отсутствует каталог /d/. Кроме того, поскольку следующий уровень содержит как числа, так и буквы, вы не можете использовать \d+ для его соответствия. Попробуйте это:

$pattern = '#//(?:(?:chris|terry|jack)\.)?mydomain\.com/d/([^/]+)(?|/)#'; 

DEMO at regex101
PHP demo at ideone

И когда вы пишете регулярное выражение для имен путей, я предлагаю использовать разделитель, кроме /, поэтому вам не придется бежать все слеши в регулярном выражении; Я использовал # выше.

+0

Так жаль ... я не был очень ясен в своем примере. Подложки - это всего лишь примеры. У них не было бы никаких цифр. Я обновил свой вопрос. – Cybercampbell

+0

Я обновил ответ в соответствии с 'chris',' terry' или 'jack' в качестве поддоменов. – Barmar

+0

Спасибо. Не уверен, что я делаю неправильно, но $ match aray пуст. Идеи? – Cybercampbell

Смежные вопросы