2011-11-17 232 views
0

我有一個字符串:正則表達式替換佔位符

AAA foobarfoobarfoobar foo baar bar foo BBB and so on 

後替換它應該像looke:

AAA foobarfoobarfoobar foo baar bar foo 

基本BBB,一切的背後應當剝去。所以我的第一個想法是一樣的表達式:

BBB.* 

這實際上做的工作。但我只希望這工作,如果BBB代表的AAA後面,讓

BBB bbb AAA aaa BBB ccc 

whill更換,以

BBB bbb AAA aaa 

第一BBB下榻因爲在它的前面沒有AAA。

我的想法是像

AAA.*?BBB.* 

這個表達式將匹配正確的部分,我認爲,但它同時也會殺滅整個事情。所以我知道有佔位符或什麼的,但不能找出如何正確使用它們。這是如何完成的?

回答

1

插入成才嘗試這樣

(?<=AAA.*?)BBB.* 

(?<=AAA.*)是一個背後的斷言,.net能夠處理它們沒有長度限制,所以它應該爲你工作。

另一種解決方案將是

(AAA.*?)BBB.* 

,並與來自捕獲組內容替換1

2

你可以使用一個回顧後:

(?<=AAA.*?)BBB.*$ 

這將確保AAA將先BBB。快速測試:

PS> 'BBB bbb AAA aaa BBB ccc' -replace 'AAA.*?BBB.*$' 
BBB bbb 
PS> 'BBB bbb AAA aaa BBB ccc' -replace '(?<=AAA.*)BBB.*$' 
BBB bbb AAA aaa