Regexp для обработки строк, похожих на test-12-1 (php) - PullRequest
0 голосов
/ 22 декабря 2018

Мне нужна помощь в написании регулярных выражений для разбора входных строк, подобных этим:

test-12-1

blabla12412-5

t-dsf-gsdg-x-10

к следующим матчам:

test и 1

blabla12412 и 5

t-dsf-gsdg-x и 10

Я пытаюсь достичь этого, используя что-то вроде

$matches = [];
preg_match('/^[a-zA-Z0-9]+(-\d+)+$/', 'test-12-1', $matches);

Но я получил неожиданный результат:

 array (
   0 => 'test-12-1',
   1 => '-1',
 )

Вы можете двигаться вперед с помощью этой игровой площадки: https://ru.functions -online.com/preg_match.html?command={"pattern":"/^[a-zA-Z0-9]+(-\d+)+$/","subject":"test-12-1" }

Большое спасибо!

1 Ответ

0 голосов
/ 22 декабря 2018

Вы можете использовать

'~^(.*?)(?:-(\d+))+$~'

См. Демоверсию regex

Подробности

  • ^- начало строки
  • (.*?) - Группа 1: любой ноль или более символов, кроме символов разрыва строки, как можно меньше
  • (?:-(\d+))+ - 1 или более вхождений
    • - - дефис
    • (\d+) - Группа 2: одна или несколько цифр (последнее вхождение сохраняется в значении группы, поскольку оно находится в повторяющейся группе без захвата)
  • $ - конец строки.

enter image description here

...