2014-02-20 2 views
7

이 PowerShell 스크립트의 주요 목적은 폴더 내의 HTML 파일을 검색하고 특정 HTML 태그를 찾고 내가 말하는 것과 바꾸는 것입니다.PowerShell의 Multiline Regex

나는 찾기의 3/4을 할 수 있었고 완벽하게 대체되었습니다. 문제가있는 것은 정규 표현식입니다.

automate -school "C:\Users\$env:username\Desktop\schools\$question" -query '(?mis)(?!exclude1|exclude2|exclude3)(<a[^>]*?>(\s|&nbsp;|<br\s?/?>)*</a>)' -replace '' 
: 여기
<a href="programsactivities_skating.html"><br /> 
              </a> 

내가 그것을 사용하고있는 기능과 함께, 내가 지금까지 가지고있는 정규식 :

내가 내 정규식 발견하고 대체하기 위해 노력하고 마크 업입니다

function automate($school, $query, $replace) { 
    $processFiles = Get-ChildItem -Exclude *.bak -Include "*.html", "*.HTML", "*.htm", "*.HTM" -Recurse -Path $school 
    foreach ($file in $processFiles) { 
     $text = Get-Content $file 
     $text = $text -replace $query, $replace 
     $text | Out-File $file -Force -Encoding utf8 
    } 
} 

내가 AB이에 대한 해결책을 알아 내기 위해 노력 해왔다 : 여기

그리고 은 자동화 기능입니다 지금 2 일을 나가고, 단지 그것이 일하게하는 것처럼 보일 수 없다. 문제가 멀티 라인을 설명하기 위해 정규 표현식에 알릴 필요가 있다고 판단했습니다. 그게 내가 문제가되는 것입니다.

누군가가 제공 할 수있는 도움은 매우 감사하겠습니다.

미리 감사드립니다.

답변

18

Get-Content은 문자열의 배열을 생성합니다. 각 문자열에는 입력 파일의 한 줄이 포함되어 있으므로 두 줄 이상의 텍스트 구절을 일치시킬 수 없습니다. 당신이 한 줄 이상 일치 할 수 있도록하려는 경우에는 하나의 문자열로 배열을 병합해야합니다

$text = Get-Content $file | Out-String 

또는

[String]$text = Get-Content $file 

또는

$text = [IO.File]::ReadAllText($file) 

주 그 1 st 및 2 nd 메서드는 입력 파일의 줄 바꿈을 유지하지 않습니다. 방법 2는 Keith가 주석에서 지적한대로 모든 줄 바꿈을 망가 뜨리고, 방법 1은 배열에 가입 할 때 각 줄의 끝에 <CR><LF>을 넣습니다. 후자는 Linux/Unix 또는 Mac 파일을 다룰 때 문제가 될 수 있습니다.

+0

완벽하게 작동했습니다. 감사합니다! –

+5

V3 이상인 경우'$ text = Get-Content $ file -raw'. BTW는 줄 바꿈을 유지하지 않으므로 마지막 예제를주의하십시오. –

1

나는 당신이 그 요소를 제외와 함께 할 노력하고 무엇을하지 않습니다,하지만 난 멀티 라인 정규식은 여기 문자열에 구축하는 것이 쉽게 찾을 수 있습니다 :

$text = @' 
<a href="programsactivities_skating.html"><br /> 
             </a> 
'@ 

$regex = @' 
(?mis)<a href="programsactivities_skating.html"><br /> 
\s+?</a> 
'@ 

$text -match $regex 

True 
-1

Get-Content을 것이다 문자열 배열을 반환하면 해당 문자열을 연결하여 문자열을 만들려고합니다.

+0

왜 $ text = (Get-Content $ file) - "\'r \'n" 또는 위에서 언급 한대로 : $ Text = Get-Content $ file | 아웃 - 스트링 – dwarfsoft