2014-06-19 15 views
1

鑑於特定標誌包圍任意的文本塊之間的正則表達式,我想換成別的東西全塊(在本例中,「香蕉」)PowerShell的更換兩個標籤

$newvar = $oldvar -replace "<!-- URL -->(*.)<!-- END -->","BANANA"

是在PS正則表達式中有一個模式不需要轉義,並且語法可以如此簡單以實現替換?

更新:我現在明白它應該是.*,而不是*.,但仍然沒有骰子。該匹配涵蓋多行,如果這增加了正則表達式的複雜性或需要其他選項。

+2

你確定它是'(*)'和'沒有(。*)' – aelor

回答

3

它在我看來像你有.*反向(*.)。除此之外,嘗試:

$newvar = $oldvar -creplace '(?s)<!-- URL -->.*?<!-- END -->', 'BANANA' 
  • 在回答您的意見,我已經做了.*?懶惰,所以它不會「強者」(關於懶惰與貪婪的詳細信息,請參閱參考一節)
  • 同樣參考您的意見,(?s)激活DOTALL模式,允許.*?跨多行匹配。

參考

The Many Degrees of Regex Greed

+0

感謝。 ''替換'「,」BANANA「','replace'或'creplace'都替換了最初的標籤,所以至少現在我知道沒有什麼東西需要轉義了。但是,它無法匹配整個內容。我應該補充說,內容跨越多行,也許就是這樣。 '(。*)'似乎沒有工作... –

+0

嘗試新版本。 – zx81

+0

這樣做,merci beaucoup! (給你在T減3分鐘的獎盃;) –