2014-06-28 77 views
5

使用正則表達式(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,而不是變量或屬性。如果可能的話。

+0

感謝您的信息,是第一個答案解決它完全的,我曾嘗試點擊「投票」,但它說我需要15分才能投票,但我不知道這個複選標記選項,即使像我這樣的新手也可以使用,所以謝謝,我現在檢查了一個。所有的答案都很有趣,可以瞭解正則表達式的含義,但是第一個答案已經爲我解決了。我應該「接受」所有?再次感謝。 – user3762977

+0

順便說一下,我的上面「感謝信息」的評論是迴應評論,現在消失了,讓我知道關於選中標記功能的人「接受」了一個答案。 – user3762977

回答

2

選項1

  • 搜索:^.*/
  • 替換:Empty string
  • 因爲*量詞是貪婪的,^.*/將匹配從行的開始到非常最後的斜線。所以你可以用一個空字符串直接替換它,並且留下你想要的文本。

選項2

  • 搜索:^.*/(.*)
  • 替換:第1組(典型地,語法將$1\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

相關問題