2011-12-02 67 views
1

我需要正則表達式來刪除匹配前的任何文本並且包含匹配Java正則表達式之前的所有內容幷包含匹配

例如,我想刪除「123S」,一切都在它之前,我知道我可以

string.replaceAll("^.*?(?=[123S])",""); 
    string.replaceAll("123S",""); 

這樣做,但真的想這樣做,在一個單一的表達式(無法找到另一個例子中的任何地方!)

回答

3

你可以做到這一點:

string.replaceAll("^.*123S",""); 

刪除非貪婪?去年發生和.*之前的一切相匹配。

+1

這個問題並不清楚,但他可能真的想要。*?所以他可以找到第一場比賽而不是最後一場比賽。 –

0
string.replaceAll("^.*?123S",""); 

更高效,更清晰,讓別人知道你在做什麼。

+0

在這種方法中,我看不到任何性能增益,它並沒有真正回答這個問題。 – Thomas

2
string.replaceAll("^.*?123S", ""); 

(?=是「如果跟着」模式,你不想要的,[123S]甚至不改正它會趕上只是「2」的實例。

3

你不需要提前看:

"abc123Sdef123Sxyz".replaceAll("^.*?123S",""); 

這取代了第一 occurence而已,如果那是你所需要的(輸出def123Sxyz)。

如果要替換,直至最後123S,只是刪除?修改:

"abc123Sdef123Sxyz".replaceAll("^.*123S",""); 

輸出是xyz

相關問題