正则表达式匹配所有内容,直到最后一次出现/

时间:2014-06-28 09:40:34

标签: regex ant

使用正则表达式(Ant中的replaceregexp)如何匹配(然后替换)从行首开始的所有内容,包括最后一次出现的斜杠?

我需要的是从以下任何一个开始:

  

../../ replace_this / keep_this

     

../ replace_this / replace_this / Keep_this

     

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

将它们变成这个:

  

what_I_addedKeep_this

看起来它应该很简单,但我没有得到它。我已经制作了正则表达式,它将识别从那里到行尾的最后一个斜杠和匹配,但我需要的是一个匹配从行的开头到最后一个斜杠的所有内容,所以我可以将它全部替换掉。

这是一个Ant构建文件,它读取一堆.txt文件并转换它在其中找到的任何链接。我只想使用replaceregexp,而不是变量或属性。如果可能的话。

3 个答案:

答案 0 :(得分:15)

你可以匹配:

.*\/

并替换为您的文字。

DEMO

答案 1 :(得分:3)

你想要做的是贪婪匹配,模式的最长匹配,通常是默认匹配,但匹配到'/'的最后一个实例。

这将是这样的:

 .*\/

说明:

. 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

答案 2 :(得分:2)

选项1

  • 搜索:^.*/
  • 替换:Empty string
  • 由于*量词是贪婪的,^.*/将从行的开头到最后一个斜杠匹配。因此,您可以直接用空字符串替换它,并留下您想要的文本。

选项2

  • 搜索:^.*/(.*)
  • 替换:第1组(通常,语法为$1\1,不确定Ant)
  • 同样,^.*/与最后一个斜杠匹配。然后,您使用(.*)将该行的结尾捕获到第1组,并将整个匹配替换为第1组。
  • 在我看来,没有理由选择这个选项,但理解它很好。