2016-09-13 5 views
-1

Работаю в perl, но у меня возникают некоторые проблемы с вырезанием других имен папок, чтобы оставить последние два имени папки.Выбор регулярного выражения двух последних имен путей папки

Trainings and Events 
General Office\Archive 
General Office\Office Opperations\Contacts 
General Office\Office Opperations\Office Procedures\How Tos 
public_html\Accordion\.svn\tmp\text-base 

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

Trainings and Events 
General Office\Archive 
Office Opperations\Contacts 
Office Procedures\How Tos 
tmp\text-base 
Office Opperations\Contacts 

Ive прочитать некоторые другие StackOverflow, которые показали последние два имена папок выбраны, но я не могу отменить это выражение. (Я свяжу его, если найду его)

В настоящее время я использую возвышенный текст 3 для проверки моих выражений.

Спасибо

ответ

0

Узор вы хотите

s/.+\/(.+\/.+)$/$1/g 

Это будет захватить последний бит имя папки и заменить всю строку с ним.

0
(?:[^\\]*\\|^)[^\\]*$ 

Вы действительно хотите «до двух», потому что иначе вы не поймаете «Обучение и события». Чтобы решить эту проблему, я сопрягать отдельно два случая:

  • Либо имя папки (любое количество не обратной косой черты), а затем через слэш, или начало строки
  • Другой имя папки
  • Конец string
+0

Тогда я должен использовать grep, чтобы поместить выделение в массив? – cacartano

+0

Вы запросили «Регулярное выражение выбора двух последних имен путей к папке». Это и есть ответ. Я не знаю, что вы должны делать с этим. Если вы хотите получить результаты в массиве, то это должен был быть вопрос, нет? Вы также не указываете, находятся ли ваши данные в файле или в строке или в массиве. Я могу только предположить, что вы хотите его в Perl из-за ваших тегов. Эти вещи, несомненно, повлияют на ответ. – Amadan