2015-08-22 2 views
0

Я пробовал несколько различных экземпляров, и я просто не могу понять, что это правильно, так что мы можем надеяться, что другие могут помочь в этом проекте.Регулярное выражение для значения в URL-адресе - Скрининг экрана

Работает на проекте scrape на основе PHP.

Я хотел, чтобы захватить «5094151» из ниже URL:

http://www.test.com/item/11-x-17-1-1-2-Gold-Distressed-Picture-Frame-11101202-5094151

Имейте в виду, что это число «5094151» представляет собой номер позиции, для элемента листинга, так что каждый адрес будет быть разными, и цифры могут отличаться по размеру. Например, длина этого номера может быть 4 цифры, это может быть 7, это может быть 10.

Я ищу функцию preg_match, которая может дать мне это число.

Любая помощь будет очень признательна!

+0

Я, вероятно, должен уточнить немного больше ...Я использую функцию scrape на основе php, которая «закручивает» URL-адреса со страницы ... Предыдущий метод: [code] preg_match_all ('~ "(http://www.test.com/item/[^"] +) «~ is», $ index, $ matches); [/ code], который больше не работает, конечно, так как разметка изменилась, чтобы выглядеть как url ​​как исходный, поэтому я ищу правильный метод для обновления этого конкретного – cwbray

+0

Вы говорите, что хотите получить все * «номера позиций» * от URL-адреса, а не только от последнего? – ndn

+0

Что мы делаем, это загрузка страницы, проверка наличия каких-либо ссылок, и если да, загрузите их Пример:

$ url = ((int) $ page == $ page)? $ base_url. '? page = profile & pg ='. $ page. '& profile_username ='. $ username: $ page; $ index = $ curl-> fetch_url ($ url, $ post, $ cur_ip); // детализированные URL-адреса и категории preg_match_all ('~ "(http://www.test.com/item/[^"] +) "~ is', $ index, $ matches); foreach ($ matches [1] as $ key => $ value) { $ ret [$ value] = $ value; } – cwbray

ответ

1
\d+$ 
  • \d+ матчи как много цифр, как это возможно (минимум одного)
  • $ соответствует концу строки

See it in action

preg_match('/\d+$/', $url, $item_number); 
echo $item_number[0]; // => 5094151 
1

Учитывая ваш текущий пример этого regex должен найти id ,

.*-(\d+) 

Демо: https://regex101.com/r/oD5eV8/1

.* говорит не захватить каждый/любой символ до последнего -. \d - это номер + - это одно или несколько номеров, а () фиксирует значение.

Использование в PHP,

$string = 'http://www.test.com/item/11-x-17-1-1-2-Gold-Distressed-Picture-Frame-11101202-5094151http://www.test.com/item/11-x-17-1-1-2-Gold-Distressed-Picture-Frame-11101202-5094151'; 
preg_match('~.*-(\d+)~', $string, $id); 
echo $id[1]; 

Выход:

В ~ ы в примере PHP являются разделители; они различают, где регулярное выражение начинается и заканчивается.

1

Если это последняя часть строки, и это всегда заканчивается -{number}, нет необходимости в регулярных выражениях:

$num = strrchr($url, '-'); 
0

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

$string = 'http://www.test.com/item/11-x-17-1-1-2-Gold-Distressed-Picture-Frame-11101202-5094151'; 
$id = end(explode("-",$string)); 
0
$id = preg_replace('/.*-/', '', $url); 

Таким образом, вы можете держать его в одной строке.

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