2014-06-28 7 views
5

Использование регулярного выражения (replaceregexp в Ant), как я могу сопоставить (и затем заменить) все с начала строки, вплоть до последнего появления косой черты ?регулярное выражение для соответствия всем, до последнего вхождения/

Что мне нужно, чтобы начать с любого из них:

../../replace_this/keep_this

../replace_this/replace_this/Keep_this

/../ ../replace_this/replace_this/Keep_this

и превратить их в этом:

what_I_addedKeep_this

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

Это файл сборки Ant, который читает кучу TXT-файлов и преобразует любые найденные в них ссылки. Я просто хочу использовать replaceregexp, а не переменные или свойства. Если возможно.

+0

Спасибо за информацию, да первый ответ решил его полностью, я попробовал нажать «проголосовать», но он сказал, что мне нужно 15 очков, прежде чем я смогу проголосовать, но я не знал о флажковом варианте, который доступен даже для newb здесь, как я, поэтому спасибо, вы проверили это сейчас. Все ответы были интересны, чтобы узнать о том, что сделал regexp, но тот первый решил это для меня. Должен ли я «принять» все? Еще раз спасибо. – user3762977

+0

BTW мой выше комментарий «Спасибо за информацию» был в ответ на комментарий, теперь исчез, от кого-то, дающего мне знать о функции галочки, чтобы «принять» ответ. – user3762977

ответ

12

Вы можете соответствовать этому:

.*\/ 

и заменить текст.

DEMO

+0

Отлично. Большое спасибо. – user3762977

2

Вариант 1

  • Поиск: ^.*/
  • Заменить: Empty string
  • Поскольку * квантор жаден, ^.*/ будет соответствовать от начала линии до самого последний слэш. Таким образом, вы можете напрямую заменить это пустой строкой, и у вас останется нужный текст.

Вариант 2

  • Поиск: ^.*/(.*)
  • Заменить: Группа 1 (как правило, синтаксис будет $1 или \1, не уверен Ant)
  • Опять ^.*/ матчи в последняя косая черта. Затем вы фиксируете конец строки в группе 1 с помощью (.*) и заменяете весь матч Группой 1.
  • На мой взгляд, нет причин выбирать этот вариант, но это хорошо понять.
+0

Для варианта 2 это может быть проще: '[^ \ /] * $'. – Markus

+0

@Markus Вы правы, что прекрасно соответствует концу строки. :) – zx81

1

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

Это было бы что-то вроде этого:

.*\/ 

Объяснение:

. any character 
* any and all characters after that (greedy) 
\/ the slash escaped, this will stop at the **last** instance of '/' 

Вы можете увидеть его в действии здесь: http://regex101.com/r/pI4lR5

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