Почему бы не объединить часть домена с остальной частью URI? Почему один раз пропустить поддомен, а один раз сделать его обязательным?
$sURI= 'whatever';
if( preg_match( '#imdb\\.com/title/tt(\\d{7})#i', $sURI, $aMatch ) ) {
echo 'IMDb, movie #'. $aMatch[1];
} else
if( preg_match( '#themoviedb.org/movie/(\\d+)($|-)#i', $sURI, $aMatch ) ) {
echo 'TMDb, movie #'. $aMatch[1];
} else {
echo 'Unrecognized';
}
Таким образом, не имеет значения, идет ли URI IMDb с www.
или нет. Поскольку идентификаторы mov ie имеют фиксированную длину, нам даже не нужно ожидать / заботиться о следующем sla sh. Ваша ошибка заключалась в ожидании sla sh без какой-либо необходимости.
То же самое для TMDb, которое либо заканчивается сразу (но мы хотим довести все цифры до конца, а не только первую), либо за ним следует да sh. i
предназначен для действительно искаженных URI по какой-либо причине. Ваша ошибка заключалась в том, чтобы ожидать da sh и сделать цифры совершенно необязательными (когда хотя бы одна должна быть необходима, как в https://www.themoviedb.org/movie/9)
Примечание: использование \\d
в строке PHP для регулярного выражения - это правильный путь, поскольку вам сначала нужно иметь дело с контекстом строки - там эффективный backsla sh должен экранироваться самим backsla sh. И только после этого встречается область действия регулярного выражения. \d
также работает только потому, что неизвестные escape-последовательности игнорируются.