2015-05-07 2 views
-2

Я пытаюсь построить регулярное выражение, которое будет захватить TEXT* из обоих файлов нижерегулярное выражение «что-то или ничего» матч

/A/B/C/D/TEXT1/TEXT2.TEXT3.log 
/A/B/C/D/TEXT1/TEXT2.trc 

Я вышел с

/A/B/C/D/([^\/]+)/([^\/]+)?(?:\.)?([^\/]+)\.(log|trc) 

Это не работает как я ожидаю.

В принципе, мне нужно собрать все TEXT1, TEXT2 и TEXT3 поля (если они существуют) из обоих примеров для дальнейшего использования; если нет, как в случае со второй строкой, только TEXT1 и TEXT2.

+0

Что ab (\^\ /] +) \/([^ \ /] +)? (?: \.)? ([^ \ /] +) . \ (журнал | TRC) '? – Kasramvd

+0

, пожалуйста, будьте более конкретными в том, что именно вы пытаетесь найти и каков ваш результат? – pastacool

+2

Вы должны быть более конкретными; не просто сказать, что будет соответствовать, но и то, что не будет (и описать словами или примерами то, что захватывает, чего вы хотите, что вы делали). Вот еще один шаблон, который будет соответствовать вашим двум примерам: '. *' Кроме того, название абсолютно неинформативно. – Amadan

ответ

0

Вы можете использовать это регулярное выражение:

\/A\/B\/C\/D\/([^\/]+)\/(\w+)?(?:\.(\w+))?\.(?:log|trc) 

В случае, если у вас есть другие символы, чем просто буквы, цифры или символ подчеркивания (захвачена \w), вы можете ограничить до [^.]+:

\/A\/B\/C\/D\/([^\/]+)\/([^.]+)?(?:\.([^.]+))?\.(?:log|trc) 

См. Demo 1 и Demo 2

0

Как насчет использования концевого якоря?

/\/([^\/]\/[^\/]?)\.(log|trc)$/