регулярное выражение, чтобы соответствовать все, до последнего вхождения /

используя регулярное выражение (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, а не переменные или свойства. Если можно.

3 ответов


вы можете сопоставить этот:

.*\/

и замените своим текстом.

демо


1

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

2

  • найти: ^.*/(.*)
  • заменить: Группа 1 (обычно, синтаксис будет или , не уверен, что АНТ)
  • опять ^.*/ соответствует последней черте. Затем вы захватываете конец строки в группу 1 с помощью (.*), и замените весь матч на Группу 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