@webhabr

Как «захватить» регуляркой оставшуюся часть строки после третьего дефиса?

Вроде бы простой вопрос, но никак не могу его решить.
Есть строка (в ней бывает разное количество слов, написанные через дефис).
Например:
product-promo-video-photo-image
Надо с помощью регулярки "захватить" ту часть строки, которая находится после третьего дефиса (включая его самого).
В моем случае регулярка работает следующим образом: все то, что она "захватывает" в результате удаляется и остается ли та часть строки, которую она не "трогает".

Результат у меня будет такой:
product-promo-video
  • Вопрос задан
  • 188 просмотров
Решения вопроса 1
XanXanXan
@XanXanXan
(?<=(.*-.*){2})-.*
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@alexalexes
Регулярки не удаляют и не модифицируют исходную строку.
Вашу задачу нужно рассматривать как:
"Взять первые три слова, разделенные дефисами".
Можно сматчить примерно такой регуляркой:
^([a-z]*\-){2}[a-z]*
"Взять два раза слово+дефис и еще слово впереди".
Ответ написан
Можно так

#!/bin/bash
perl -pe 's/
(
[^-]+- # часть1-
[^-]+- # часть2-
[^-]+  # часть3 без минуса
)
-.*    # 3-й минус и всё остальное отбрасываем
/\1/x' <<< product-promo-video-photo-image
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
Wanted. Санкт-Петербург
До 450 000 ₽
Wanted. Санкт-Петербург
До 100 000 ₽
Wanted. Санкт-Петербург
До 120 000 ₽
21 нояб. 2024, в 22:21
3000 руб./в час
21 нояб. 2024, в 21:42
100000 руб./за проект
21 нояб. 2024, в 21:30
500 руб./за проект