PREG_ или Regex Вопрос - PullRequest
       13

PREG_ или Regex Вопрос

1 голос
/ 12 августа 2011

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

Я считаю, что "правильный" способ вернуть это число - это 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; 

Ответы [ 2 ]

1 голос
/ 12 августа 2011

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

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

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

1 голос
/ 12 августа 2011

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

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

...