匹配最后一个 / 前的所有内容的正则表达式

25
使用正则表达式(在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,不使用变量或属性。 如果可能的话。

谢谢提供的信息,是的,第一个答案完全解决了我的问题。我曾尝试点击“投票”,但它说我需要15个积分才能投票,但我不知道即使对于像我这样的新手也有可用的“勾选”选项,所以谢谢,我现在已经勾选了那个答案。所有的答案都很有趣,让我了解了正则表达式的作用,但第一个答案已经为我解决了问题。我应该“接受”所有答案吗?再次感谢。 - user3762977
顺便说一句,我的上面的“谢谢信息”评论是回应某人告诉我关于勾选框功能以“接受”答案,而该评论现在已经消失了。 - user3762977
3个回答

40

你可以匹配这个:

.*\/

并替换为您的文本。

演示


我需要这个的相反 - 从一个字符的最后一个实例匹配结束 - 这是一个解决方案:https://dev59.com/L2sy5IYBdhLWcg3wtwMd#8374980 - PeterX

12

你想要做的是贪心匹配,尽可能匹配最长的模式,通常默认就是这样,但是要匹配到最后一个'/'实例。

大概是这样的:

 .*\/

说明:

. 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

3

选项1

  • 搜索: ^.*/
  • 替换: 空字符串
  • 因为量词符号*是贪婪的,^.*/将匹配从行首到最后一个斜杠。所以你可以直接用空字符串替换它,然后你就得到了想要的文本。

选项2

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

1
对于选项2,这可能更容易:[^\/]*$ - Markus
@Markus 你说得对,那很好地匹配了字符串的结尾。 :) - zx81
我需要匹配最后一个斜杠之前的内容 - 这是一个解决方案:https://dev59.com/L2sy5IYBdhLWcg3wtwMd#8374980 - PeterX

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接