Мне нужна помощь с написанием регулярного выражения для анализа таких строк ввода:
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 fastented+(-\d+)+$/","subject ": "тест-12-1"}
Большое спасибо!






Вы можете использовать
'~^(.*?)(?:-(\d+))+$~'
См. демонстрация регулярного выражения
Подробности
^ - начало строки(.*?) - Группа 1: любые ноль или более символов, кроме символов разрыва строки, как можно меньше(?:-(\d+))+ - 1 или более вхождений
- - дефис(\d+) - Группа 2: одна или несколько цифр (последнее вхождение сохраняется в значении группы, поскольку оно находится в повторяющейся группе без захвата)$ - конец строки.Есть ли здесь какое-то преимущество перед просто ^ (. *?) - (\ d +) + $, так как это все равно захватит последнюю группу?
Спасибо за полезный ответ! Но «тест-12-1» обрабатывают как «тест» и «1» вместо «тест-12» и «1» ...
@NewEXE Посмотрите на свой вопрос, это то, о чем вы просили. test-12-1 должен давать test и 1. В противном случае используйте '~^(.*)-(\d+)$~', см. эта демонстрация.
@Wiktor Stribiew, совсем плохо, извините за это! Мне нужно больше спать...
вы хотите
test-12и1илиtest,12и1. В вашем вопросе непонятно