2016-11-09 97 views
1

我提取從網站的URL在此字符串形式的網址:正則表達式來捕獲

@{href=http://download.company.net/file.exe}[0] 

我想不出模式如何讓這部分出來的:http://download.company.net/file.exe這樣我就可以使用它作爲URL來下載文件。

從我的角度來看,邏輯應該是,我需要首先匹配「http」作爲字符串的開始,通配符然後匹配「}」,但不包括它在最終輸出中。所以IDK ... [http]*\}(我知道這是我的「語法」是完全錯誤的,但你明白了)

原因我不想包括「EXE」模式,是文件擴展名可能是「MSI 「我希望它更具普遍性。也有一些好的和全面的PS正則表達式文章會幫助我很大(沒有經驗的頭腦) - 我真的沒有發現任何「新手友好」或足夠全面瞭解這個話題。

+1

如果你想在一般的正則表達式的一些文件,[regular-expressions.info(http://www.regular-expressions.info/)是好地方。它還有一個關於'powershell'的實現的[一個頁面](http://www.regular-expressions.info/powershell.html) – Aaron

回答

1

您可以使用[regex]::match-replace

在以下示例中,我捕捉一切href=後這不是一個起始花括號}

'@{href=http://download.company.net/file.exe}[0]' -replace '@{href=([^}]+).*', '$1' 

輸出:

http://download.company.net/file.exe 
+0

你認爲你可以將模式分解成更小的「塊」和解釋,每個部分呢?無論如何,我都會接受你的回答,但這會有所幫助。 – RiddleMeThis

+1

你可以在這裏找到更多有關特定正則表達式的信息:https://regex101.com/r/alp941/1 –

1

我會使用-cmatch-imatch作爲

if ($content -imatch '(?<=href=).*(?=})') { 
    $result = $matches[0] 
} else { 
    $result = '' 
} 

在測試數據的情況下,它會返回

http://download.company.net/file.exe 
+0

你爲什麼使用區分大小寫的匹配?此外這隻返回真或假.... –

+1

好點。我只是暗示了一種執行任務的方式。請參閱最新解決方案。 – Saleem