帮bukelong提出问题!关于在文本中取出字符串的问题,希望大家出手相助!! (200分)

  • 主题发起人 主题发起人 thinkjsp
  • 开始时间 开始时间
<HTML>
<HEAD>
<TITLE>《JAVA新技术-JSP》</TITLE>
<META http-equiv=Content-Type content="text/html;
charset=gb2312">
<LINK href="../style.css" rel=stylesheet>
<BODY text=#000000 bgColor=#ffffff>
<DIV align=center>
<CENTER>
<br>
<TABLE style="BORDER-COLLAPSE: collapse" borderColor=#111111 cellSpacing=0
cellPadding=4 width=669 border=0 height="149">
<TBODY>
<TR bgColor=#f3fcf3>
<TD style="border:1px solid #C0C0C0;
" align=center width=659 height=38 bgcolor="#FFFFFF">
<b>JAVA新技术-JSP</b><hr noshade color="#999999" size="1"><p align="left">
作 者 :
<br>
<br>   在 Sun 正式发布 JSP(JavaServer Pages) 之后,这种新的 Web 应用开发技术很
<br>快引起了人们的关注。 JSP 为创建高度动态的 Web 应用提供了一个独特的开发环境。
<br>按照 Sun 的说法, JSP 能够适应市场上包括 Apache WebServer 、 IIS4.0 在内的 8
<br>5% 的服务器产品。即使您对 ASP “一往情深”,我们认为,关注 JSP 的发展仍旧很有
<br>必要。
<p align="right">整理发布:</TD>
</TR>
</TBODY>
</TABLE>
</CENTER>
</DIV>
</BODY>
</HTML>
 
这样提取不是很容易的,
根本就不符合你开头所说的规律的,
还是进行Html解析吧
 
>>lich
那我应该怎么做呢?
 
应该定一个规则:
1。提取的是<描述></描述>之间的字
2。要支持嵌套
3。<描述/>也视为该描述结束
4。<P><BR>一类的最难判断,因为Html不是一个严格的XML描述语言,所以他们可以不闭合
如果你能彻底解析明白,就嫩做一个静态页面的浏览器了。
 
楼上说的没错,
torry上面能找到一些关于Html解析的组件和例程,
应该能满足你的需要,不过不是Java和VB的
 
>>lich
没事,要是有的话也可以发给我,自己再慢慢学吧!
 
原来是想作一个解析html的程序呀, 我以前作过一个用的是C++,自己作了一堆的字符串分析的函数,后来我发现这种工作用正则表达式来作就简单多了, 我看你还是好好学学正则表达式吧, 有很多例子就是查找什么超连接, email什么的.
 
我当时作的程序跟你要的类似, 是用程序从不同的网站上下载网页, 取出其中的用户感兴趣的新闻标题,内容,发布时间什么的, 录入到数据库中去.好像比你的这个还要难一些,因为发布时间很难解析.
 
楼主的问题突然激起了我的兴趣。我正在写一个
 
>>wr960204
谢谢,期待中...
 
词法分析而已嘛。我目前没有大块的时间,不然我也愿意试下实现的。
 
以前是按照词法分析实现的,lich的正则表达式的方法我现在正用在很多的JavaScript写的日用工具中,Java的我还没有试过呢,明天看看。
 
这里有不少的组件和例程
http://www.torry.net/html.htm
这个
HTML Parser v.1.2
比较有意思,不但能解析,还能预览
 
>>Sterntaler
谢谢,不过你能不能把lich的正则表达式的方法贴出来吗?当然,不勉强!
>>happylcq
我会和你联系的
>>lich
按Sterntaler说的,你已经做过类似的程序了,能不能贴出来给大家讲解讲解啊^O^
 
你看这样的代码对你有没有那么丁点帮助,我没有太多时间,能做得就那么多了:
import java.io.RandomAccessFile;
import java.util.regex.Pattern;
import java.util.regex.Matcher;
public class TestParser{

public static void main(String[] args) throws Exception{
String fname = "e://index.html";
RandomAccessFile raf = new RandomAccessFile(fname, "r");

byte[] buf = new byte[(int)raf.length()];
raf.readFully(buf);
String chs = new String(buf);
Pattern ptn = Pattern.compile("<title>([^<]+)</title>", Pattern.CASE_INSENSITIVE);
Matcher mtr = ptn.matcher(chs);
if (mtr.find()) System.out.print(mtr.group(1));
}
}
 
上面的正则表达式不行的,只是个试验。比如title中有'<' 或者 <title > 这样的写法都检测不出来。
 
我说的是一个Delphi的对象 Regexpr0.947 的
他有例子程序
 
楼主看看下面这个有没有点帮助?我不用正则表达式了,太复杂,JDK里面就有现成的Parser,^^
import java.io.StringReader;
import javax.swing.text.MutableAttributeSet;
import javax.swing.text.html.HTML;
import javax.swing.text.html.HTMLEditorKit;
import javax.swing.text.html.parser.ParserDelegator;
public class TestParser2 extends HTMLEditorKit.ParserCallback{
String outerHTML = "<html ><head ><title >Hello World! </title></head><body></body></html>";
StringReader in = null;
HTML.Tag m_CurTag = null;

public TestParser2() throws Exception{
init();
}

public void init() throws Exception{
in = new StringReader(outerHTML);
System.out.println(outerHTML);
new ParserDelegator().parse(in, this, true);
in.close();
in = null;
}

public void handleComment(char[] data, int pos) {
System.out.println("Comment: " + new String(data));
}
public void handleText(char[] data, int pos) {
if (m_CurTag != null)
System.out.println("Tag: " + m_CurTag + ";
Text: " + new String(data));
}
public void handleError(String msg, int pos) {
System.out.println("Error: "+msg);
}

public void handleSimpleTag(HTML.Tag t, MutableAttributeSet a, int pos) {
m_CurTag = t;
System.out.println("Simple Tag: " + t);
}

public void handleStartTag(HTML.Tag t, MutableAttributeSet a, int pos) {
m_CurTag = t;
System.out.println("Tag Start: " + t);
}

public void handleEndTag(HTML.Tag t, int pos) {
m_CurTag = null;
System.out.println("Tag End: " + t);
}
public static void main(String[] args) throws Exception{
new TestParser2();
}
}
 
不过我多用了一会儿就觉得,这个Parser好像有时不大好使……
 
这个问题好像有点难办啊,没有一个比较好的解决方案啊!
 
后退
顶部