2013-11-22 2 views
2

Я получил некоторую ссылку, как:Regex экстракт часть ссылки (PHP)

/3/topic/video1148288/ 

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

Я попытался

$embed = preg_match("#\b/video([0-9][0-9][0-9][0-9][0-9][0-9][0-9])/#", $raw); 

Но это не работает.

Любая помощь?

+0

Определить 'не work'. Он работает, и вот [demo] (http://regex101.com/r/fT2uE1). Однако я бы заменил все эти числа на '[0-9] +', что означает совпадение цифры один или несколько раз. Если вы уверены, что всегда будет 7 номеров, вы можете использовать '[0-9] {7}'. – HamZa

ответ

1

Дайте этому попытку:

$raw = "/3/topic/video1148288/"; 
preg_match("#/video(\d+)/#", $raw, $matches); 
$embed = $matches[1]; 

Рабочий пример: http://3v4l.org/oLPMX

Одна вещь, чтобы отметить, глядя на вашей попытке, что preg_match возвращает truthy/ложно значение, а не фактические матчи. Они найдены в третьем параметре ($matches в моем примере).

+0

thx это сработало, теперь я чувствую себя немым: \ – ItalianOne

+0

@ user3005467 С удовольствием =) – jszobody

+0

уже сделано, я? – ItalianOne

1
$raw = "/3/topic/video1148288/"; 

preg_match("/video(\d+)/", $raw, $results); 

print "$results[1]"; 
+1

Что делать, если ссылка была '/ 3/topic/video1148288/foo'? '. *' не очень хорошая идея, ИМО. –

+0

Прочитайте [разницу между жадным и нежирным] (http://stackoverflow.com/questions/3075130/difference-between-and-for-regex) – HamZa

+0

yah вы правы, положите \ d + :-) – ederwander

1
preg_match('/(?<=video)\d+/i', $raw, $match); 
echo $match[0]; 
Смежные вопросы