PHP preg_match_all regex - PullRequest
       7

PHP preg_match_all regex

1 голос
/ 25 февраля 2011

Если у меня есть строка вроде: 10/10/12/12

Я использую:

$string = '10/10/12/12';
preg_match_all('/[0-9]+\/[0-9]+/', $string, $results);

Это только кажется, что 10/10 и 12/12. Я также хочу соответствовать 10/12. Это потому, что после сопоставления 10/10 удаляется с картинки? Таким образом, после первого матча он будет соответствовать только вещам с /12/12?

Если я хочу сопоставить все 10/10, 10/12, 12/12, как должно выглядеть мое регулярное выражение? Спасибо.

Редактировать: я сделал это

$arr = explode('/', $string);
$count = count($arr) - 1;
$newarr = array();
for ($i = 0; $i < $count; $i++)
{
    $newarr[] = $arr[$i].'/'.$arr[$i+1];
}

1 Ответ

3 голосов
/ 25 февраля 2011

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


Причина, по которой ваше регулярное выражение не работает, заключается в том, что для совпадения используются совпадающие символы.Поиск следующего совпадения начинается сразу после того, где закончилось предыдущее совпадение.

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

'#[0-9]+/(?=([0-9]+))#'

Посмотрите, как он работает в режиме онлайн: ideone

...