Вы можете использовать флаг (?s)
в регулярном выражении.S для однострочного, также называемого, точка в некоторых местах, что делает совпадение .
между строками.
Кроме того, gc
читает строку за строкой, и любое сравнение / совпадение будет между отдельными строками и регулярным выражением.Вы не получите совпадение, несмотря на использование правильных флагов в регулярном выражении.Я обычно использую [System.IO.File]::ReadAllText()
, чтобы получить все содержимое файла в виде одной строки.
Так что рабочим решением будет что-то вроде:
gci -recurse | ?{$_.Name -match "(?i)MyPage.*\.aspx"} | %{
$c = [System.IO.File]::ReadAllText($_.Fullname)
if ($c -match "(?s)Protected Function MyFunction\(ByVal ID As Integer\) As Boolean.*End Function") {
$_.Fullname | write-host;
}
}
Для замены вы, конечно, можете использовать$matches[0]
и использовать Replace()
метод
$newc = $c.Replace($matches[0],"")