2012-02-28 4 views
1

Я хотел бы использовать одно регулярное выражение, чтобы включить полный путь (например,/home/user/java/project/src/main/java/com/website/project/File. java) в соответствующий пакет Java.Regex: полный путь к Java-пакету

Это означает, что я хотел бы удалить все до и включая «java /», имя файла плюс ведущую косую черту. А затем превратите все оставшиеся косые черты в точки.

я, кажется, чтобы быть в состоянии получить довольно далеко, используя следующий пункт матча

.+main\/java\/|\/|[a-zA-Z$]+(\.java) 

и замена с точки. (Регулярное выражение в основном ищет все до и включая «main/java /», затем заменяет все/с., А затем удаляет имя файла.

Проблема в том, что у меня теперь слишком много точек, которые я, очевидно, не могу избавиться из, так как я вместо точек :)

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

Я бы очень признателен за любую помощь.

PS: К сожалению, мне нужно использовать только одно регулярное выражение, так как я могу только вводить один и не сохранять результаты во временные переменные или что-то в этом роде.

спасибо!

Редактировать

Я пытаюсь создать tmSnippet для TextMate/Sublime Text. Я бы хотел добавить фразу «package com.company.project» (но с фактическим именем пакета, конечно) автоматически к новым файлам. Дело в том, что в таком фрагменте вы можете взять полный путь к файлу и запустить его через регулярное выражение перед выходом. Вот почему я могу использовать только одно регулярное выражение.

Edit2

Я был в состоянии сделать то, что я хотел с помощью питона скрипт и работает, что в качестве команды в Sublime Text. Для заинтересованных, см. Это GitHub commit. Мне все еще интересно, можно ли превратить все это в один RegEx. Я даже не уверен, что это возможно ...

+0

Почему вы избегаете '/' s? –

+0

Я считаю, что он думает в Perl/sed/awk, где слэш - это разделитель регулярных выражений. –

+0

О да, я избегаю косых черт, поскольку это разделитель ... – Tim

ответ

0

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

.+main\\/java\\/([[A-Za-z0-9]+\\/]+)\\/([A-Za-z0-9]+)\\.java 

Вы можете заменить '/' на захваченную первую группу с '.', а затем добавить точку, а вторые захваченные строки, давая вам полностью -qualified имя класса Java.

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

Смежные вопросы