2014-10-01 65 views
0

我使用HERITRIX來抓取名爲octetfarm.com的網站。我希望抓取工具對URI(或URL)執行正則表達式,並且如果字符串「octetfarm」存在,抓取工具應該接受它。Heritrix DecidingScope正則表達式URI

我做了2條規則

1 MatchesRegExpDecideRule 「接受」 和正則表達式 「.octetfarm。

2 rejectByDefault

當我發動octetfarm.com履帶(我非常簡單的測試網站)的第一頁只是一個鏈接如下:

<a href="http://octetfarm.com/layer1/layer1.html">layer1</a> 

爲什麼抓取工具不遵循該SIM卡其中包含字符串「octetfarm」的鏈接。

這裏是我在XML

<newObject name="decide-rules" class="org.archive.crawler.deciderules.DecideRuleSequence"> 
    <map name="rules"> 
     <newObject name="rejectByDefault" class="org.archive.crawler.deciderules.RejectDecideRule"> 
     </newObject> 
     <newObject name="octetfarm" class="org.archive.crawler.deciderules.MatchesRegExpDecideRule"> 
     <string name="decision">ACCEPT</string> 
     <string name="regexp">*.octetfarm.*</string> 
     </newObject> 
    </map> 
    </newObject> 

回答

0

您列出的正則表達式沒有完全正確的規則;試試這個來代替:

<string name="regexp">.*octetfarm.*</string> 

這之間的唯一區別,而你是直接前述octetfarm兩個字符已被逆轉。

.*在一個正則表達式中有兩個部分的語句。 .告訴正則表達式匹配任何字符(通常默認情況下不包括換行符),並且*告訴正則表達式匹配直接在它之前的0個或更多的任何字符。

然後,如果有0個或更多的任何字符,則直到看到字符串octetfarm,然後是0或更多的任何字符,然後匹配該正則表達式的全部效果。

包含字符串octetfarm.*任何一方實際上只有在正則表達式引擎試圖匹配完整字符串時才重要;你可能會發現,正如下面的正則表達式可能適用於你,因爲取決於正則表達式引擎的設置,它可能只是在提供的文本中查找匹配的任何實例:

<string name="regexp">octetfarm</string>