2014-10-20 66 views
0

我有着相似的結構化的HTML文件的目錄正則表達式(給出兩個例子):抓取內容與在PowerShell中

文件的1.HTML

<html> 
    <body> 
     <div class="foo">foo</div> 
     <div class="bar"><div><p>bar</p></div></div> 
     <div class="baz">baz</div> 
    </body> 
</html> 

文件的2.HTML

<html> 
    <body> 
     <div class="foo">foo</div> 
     <div class="bar"><div><p>apple<br>banana</p></div></div> 
     <div class="baz">baz</div> 
    </body> 
</html> 

我想創建一個PowerShell腳本返回bar div的內容,從所有的HTML剝離:

對於文件1.HTML:bar

對於文件2.HTML:apple banana

我現在有:

$directory = "C:\Users\Public\Documents\Sandbox\HTML" 

foreach ($file in Get-ChildItem($directory)) 
{ 
    $content = Get-Content $file.fullname 

    $test = [regex]::matches($content, '(?i)<div class="bar">(.*)</div>') 

    echo $test[0] 
} 

然而,這<div class="bar"><div><p>bar</p></div></div><div class="baz">baz</div>返回。換句話說,正則表達式不會停止,直到最後的</div>。我怎麼能讓它只有抓在<div class="bar"> div什麼?

+1

在這裏閱讀一些建議:http://stackoverflow.com/a/11656434 – 2014-10-20 13:47:03

回答

2

默認情況下,quantifers是greedy。他們會盡可能地匹配,仍然允許正則表達式的其餘部分匹配。使用*?表示「零或多個 - 優選儘可能少」的非貪婪匹配。

(?si)<div class="bar">(.*?)</div>