@webhabr

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

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

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

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

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

Войти через центр авторизации
Похожие вопросы