PREG_ или вопрос с регулярным выражением

Я хотел бы сопоставить последний экземпляр / (думаю, вы используете [^/]+$) и скопировать содержимое следующих четырех или менее чисел, пока не доберусь до тире -.

Я считаю, что «правильный» метод возврата этого числа — через preg_split, но я не уверен. единственный другой способ, который я знаю, это взорваться на /, перевернуть массив, взорвать на -, присвоить. Я уверен, что есть более элегантный способ?

Например

example.com/12-something // get 12

example.com/996-something // get 996

example.com/12345-no-deal // return nothing 

Я, к сожалению, не гуру регулярных выражений, как некоторые из вас, ребята.

Вот уродливый способ сделать то же самое.

$strip = array_reverse(explode('/', $page));

$strip = $strip[0];

$strip = explode('-', $strip);

$strip = $strip[0];

echo (strlen($strip) < 4) ? (int)$strip : null; 

person ehime    schedule 12.08.2011    source источник
comment
Вы можете использовать регулярное выражение: /\/([^-]{0,4})/ Число будет в первой группе захвата.   -  person Bailey Parker    schedule 12.08.2011


Ответы (2)


Это должно работать

    $str = "example.com/123-test";
    preg_match("/\/([\d]{1,4})-[^\/]+$/", $str, $matches);
    echo $matches[1]; // 123

Это гарантирует, что часть ###-word находится в конце и что есть только 1-4 цифры.

person dee-see    schedule 12.08.2011
comment
Это не всегда будет соответствовать последней косой черте. Например: example.com/123-test/blabla - person Karolis; 12.08.2011
comment
Когда я писал комментарий, была другая версия регулярного выражения;) - person Karolis; 12.08.2011
comment
preg_match(/\/([\d]{1,4})-[^\/]+$/, $page, $etc); print_r (array_pop ($ и т. д.)); Работал отлично - person ehime; 12.08.2011

Совпадение на /\/(\d{1,4})-[^\/]+$/ должно соответствовать номеру в первой переменной захвата. Прошу прощения, я не пишу PHP и не хочу иметь дело с интерфейсом preg_match, но в любом случае это регулярное выражение.

Если в наши дни PHP поддерживает разделители регулярных выражений без косой черты, m#/(\d{1,4})-[^/]+$# — это версия с меньшим количеством наклоняющихся зубочисток.

person hobbs    schedule 12.08.2011
comment
Вам не кажется, что # выглядят как 4 зубочистки вместе взятые? ;) - person dee-see; 12.08.2011
comment
hobbs Я получаю Array ( [0] => training/2-wedding-training [1] =› ) $etc = preg_split(/\/(\d{1,4})-[^\/]+$/, $страница); print_r ($ и т. д.); как результат - person ehime; 12.08.2011