2010-05-05 112 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