2010-05-05 82 views
0

我的Java程序需要重寫HTML中的URL(及時)。我正在尋找合適的工具,並想知道antlr是否爲我工作?URL重寫與antlr

例如:

<html><body> <img src="http://foo.com/foo.jpg" /> </body></html> 

欲從讀/ /寫一個流(逐字節):

<html><body> <img src="foo.jpg" /> </body></html> 

應該被重寫。

+0

您能否提供一些反映您想要處理的真實案例的示例? – 2010-05-05 15:25:15

+0

是 - 當然是: 應該重寫: 我想讀/ /寫流(逐字節)。 .. – jgray 2010-05-06 14:40:08

+0

所以你解析整個HTML文件(作爲一個流)。 AFAIK,ANTLR可以很好地處理數據流,但是自己編寫一個完整的html解析器並不是一件容易的事情,我無法想象沒有任何工具可以實現這一點。所以,如果他們知道這樣的工具,而不是要求幫助你用ANTLR(或類似的東西)創建這樣的事情,我會問這裏的人們。 – 2010-05-06 19:55:57

回答

0

正如khmarbaise所說,首先請確保,如果正則表達式可以做到這一點。但有些情況下,他們不能[*],然後我認爲,ANTLR可能確實是一個合法的選擇。

[*]本的數學背景,看http://en.wikipedia.org/wiki/Formal_grammar#The_Chomsky_hierarchy

更新

現在你更新你的問題,我看你真正想做的事:爲了修改一個完整的HTML文件,我會使用像NekoHTML或類似的解析器:http://www.benmccann.com/dev-blog/java-html-parsing-library-comparison/

然後,您可以使用這些來提取URL。然後

  • 只解析URL本身 - e。 G。用的正則表達式,Java的URL類(或有時更好:URI),或者也許ANTLR
  • 修改解析URL
  • ,再次寫出來的HTML,使用NekoHTML/...

使用正則表達式來解析整個HTML文件!理論上你可以使用ANTLR,但要做到這一點非常困難。

+0

ANTLR與正則表達式有什麼關係? – 2010-05-07 20:01:12

+0

@Bart:正則表達式可以解析喬姆斯基3型語法。 ANTLR還可以解析喬姆斯基2型(上下文無關)。它可以踢,正則表達式不夠強大了。所以,如果你需要對URL做一些非常複雜的事情 - 那就是我的方式(錯誤 - )理解問題的原始版本 - 這可能是必要的。此外,即使您使用ANTLR來解析常規語言,它也可能比正則表達式更清晰,因爲符號與BNF類似。使用ANTLR需要更多的開銷,但要取代非常複雜的正則表達式,絕對值得考慮! – 2010-05-07 22:43:31

+0

@Bart:當然,在問題更新之後(看到作者只是想在某些地方加上foo.jpg),ANTLR可能不需要...... :-) – 2010-05-07 22:49:11