给定一块由特定标签包围的任意文本,我想用其他东西替换整个块(在示例中为“BANANA”)$newvar = $oldvar -replace "<!-- URL -->(*.)<!-- END -->","BANANA"
PS regex中是否存在不需要转义的模式,然后语法可以像这样简单以实现替换吗?
更新:我现在知道它应该是.*
,而不是*.
,但仍然没有骰子。如果这增加了正则表达式的复杂性或需要其他选项,则匹配项涵盖多行。
最佳答案
在我看来,您的反向.*
(*.
)。除此之外,请尝试:
$newvar = $oldvar -creplace '(?s)<!-- URL -->.*?<!-- END -->', 'BANANA'
.*?
设置为惰性,因此它不会“过度匹配”(有关“惰性”与“贪婪”的详细信息,请参见引用部分)(?s)
会激活DOTALL
模式,从而允许.*?
在多行中匹配。 引用
The Many Degrees of Regex Greed
关于regex - Powershell替换两个标签之间的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24299201/