如何用正则表达式提取网页源文件内容

youmosheng 2010-09-01 04:45:35
源文件是:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>

<div class="main">
<div style="display:none;" id="ScriptLoader"></div>
<div class="timeline" id="ruler"></div>
</div>

<table class="datatbl" id="datatbl">
<thead>
<tr>
<th style="width:14%;">成交时间</th>
<td style="width:12%;">成交价</td>
<td style="width:14%;">涨跌幅</td>
<td style="width:17%;">价格变动</td>
<td style="width:14%;">成交量(手)</td>
<td style="width:15%;">成交额(元)</td>
<th style="width:14%;">性质</th>
</tr>
</thead>
<tbody>
<tr ><th>09:58:58</th><td>16.79</td><td>+10.03%</td><td>--</td><td>30</td><td>50,370</td><th><h6>卖盘</h6></th></tr>
<tr class="medium"><th>09:58:53</th><td>16.79</td><td>+10.03%</td><td>--</td><td>91</td><td>152,789</td><th><h6>卖盘</h6></th></tr>
<tr ><th>09:58:43</th><td>16.79</td><td>+10.03%</td><td>--</td><td>7</td><td>11,753</td><th><h6>卖盘</h6></th></tr>
<tr ><th>09:58:33</th><td>16.79</td><td>+10.03%</td><td>--</td><td>4</td><td>6,716</td><th><h6>卖盘</h6></th></tr>
<tr ><th>09:58:28</th><td>16.79</td><td>+10.03%</td><td>--</td><td>1</td><td>1,679</td><th><h6>卖盘</h6></th></tr>
<tr ><th>09:58:23</th><td>16.79</td><td>+10.03%</td><td>--</td><td>3</td><td>5,037</td><th><h6>卖盘</h6></th></tr>
<tr class="medium"><th>09:58:03</th><td>16.79</td><td>+10.03%</td><td>--</td><td>100</td><td>167,900</td><th><h6>卖盘</h6></th></tr>
<tr ><th>09:57:43</th><td>16.79</td><td>+10.03%</td><td>--</td><td>20</td><td>33,580</td><th><h6>卖盘</h6></th></tr>
<tr ><th>09:57:33</th><td>16.79</td><td>+10.03%</td><td>--</td><td>30</td><td>50,370</td><th><h6>卖盘</h6></th></tr>
<tr class="medium"><th>09:57:23</th><td>16.79</td><td>+10.03%</td><td>--</td><td>176</td><td>295,504</td><th><h6>卖盘</h6></th></tr>
<tr ><th>09:57:18</th><td>16.79</td><td>+10.03%</td><td>--</td><td>5</td><td>8,395</td><th><h6>卖盘</h6></th></tr>
<tr ><th>09:57:13</th><td>16.79</td><td>+10.03%</td><td>--</td><td>1</td><td>1,679</td><th><h6>卖盘</h6></th></tr>
<tr ><th>09:57:08</th><td>16.79</td><td>+10.03%</td><td>--</td><td>3</td><td>5,037</td><th><h6>卖盘</h6></th></tr>
<tr class="medium"><th>09:57:03</th><td>16.79</td><td>+10.03%</td><td>--</td><td>70</td><td>117,530</td><th><h6>卖盘</h6></th></tr>
<tr ><th>09:56:53</th><td>16.79</td><td>+10.03%</td><td>--</td><td>10</td><td>16,790</td><th><h6>卖盘</h6></th></tr>
<tr ><th>09:56:38</th><td>16.79</td><td>+10.03%</td><td>--</td><td>40</td><td>67,160</td><th><h6>卖盘</h6></th></tr>
<tr ><th>09:56:23</th><td>16.79</td><td>+10.03%</td><td>--</td><td>30</td><td>50,370</td><th><h6>卖盘</h6></th></tr>
<tr ><th>09:56:18</th><td>16.79</td><td>+10.03%</td><td>--</td><td>4</td><td>6,716</td><th><h6>卖盘</h6></th></tr>
<tr ><th>09:56:08</th><td>16.79</td><td>+10.03%</td><td>--</td><td>56</td><td>94,024</td><th><h6>卖盘</h6></th></tr>
<tr ><th>09:56:03</th><td>16.79</td><td>+10.03%</td><td>--</td><td>10</td><td>16,790</td><th><h6>卖盘</h6></th></tr>
<tr ><th>09:55:58</th><td>16.79</td><td>+10.03%</td><td>--</td><td>27</td><td>45,333</td><th><h6>卖盘</h6></th></tr>
<tr ><th>09:55:53</th><td>16.79</td><td>+10.03%</td><td>--</td><td>2</td><td>3,358</td><th><h6>卖盘</h6></th></tr>
<tr ><th>09:55:33</th><td>16.79</td><td>+10.03%</td><td>--</td><td>1</td><td>1,679</td><th><h6>卖盘</h6></th></tr>
<tr ><th>09:55:28</th><td>16.79</td><td>+10.03%</td><td>--</td><td>5</td><td>8,395</td><th><h6>卖盘</h6></th></tr>
<tr ><th>09:54:53</th><td>16.79</td><td>+10.03%</td><td>--</td><td>47</td><td>78,913</td><th><h6>卖盘</h6></th></tr>
<tr ><th>09:54:48</th><td>16.79</td><td>+10.03%</td><td>--</td><td>7</td><td>11,753</td><th><h6>卖盘</h6></th></tr>
<tr class="medium"><th>09:54:33</th><td>16.79</td><td>+10.03%</td><td>--</td><td>63</td><td>105,777</td><th><h6>卖盘</h6></th></tr>
<tr ><th>09:54:18</th><td>16.79</td><td>+10.03%</td><td>--</td><td>10</td><td>16,790</td><th><h6>卖盘</h6></th></tr>
<tr ><th>09:54:13</th><td>16.79</td><td>+10.03%</td><td>--</td><td>4</td><td>6,716</td><th><h6>卖盘</h6></th></tr>
<tr ><th>09:54:08</th><td>16.79</td><td>+10.03%</td><td>--</td><td>5</td><td>8,395</td><th><h6>卖盘</h6></th></tr>
<tr ><th>09:54:03</th><td>16.79</td><td>+10.03%</td><td>--</td><td>10</td><td>16,790</td><th><h6>卖盘</h6></th></tr>
<tr class="medium"><th>09:53:58</th><td>16.79</td><td>+10.03%</td><td>--</td><td>67</td><td>112,493</td><th><h6>卖盘</h6></th></tr>
<tr ><th>09:53:48</th><td>16.79</td><td>+10.03%</td><td>--</td><td>31</td><td>52,049</td><th><h6>卖盘</h6></th></tr>
<tr ><th>09:53:33</th><td>16.79</td><td>+10.03%</td><td>--</td><td>3</td><td>5,037</td><th><h6>卖盘</h6></th></tr>
<tr ><th>09:53:28</th><td>16.79</td><td>+10.03%</td><td>--</td><td>42</td><td>70,518</td><th><h6>卖盘</h6></th></tr>
<tr ><th>09:53:03</th><td>16.79</td><td>+10.03%</td><td>--</td><td>37</td><td>62,123</td><th><h6>卖盘</h6></th></tr>
<tr ><th>09:52:58</th><td>16.79</td><td>+10.03%</td><td>--</td><td>10</td><td>16,790</td><th><h6>卖盘</h6></th></tr>
<tr ><th>09:52:48</th><td>16.79</td><td>+10.03%</td><td>--</td><td>40</td><td>67,160</td><th><h6>卖盘</h6></th></tr>
<tr ><th>09:52:38</th><td>16.79</td><td>+10.03%</td><td>--</td><td>16</td><td>26,864</td><th><h6>卖盘</h6></th></tr>
<tr ><th>09:52:33</th><td>16.79</td><td>+10.03%</td><td>--</td><td>13</td><td>21,827</td><th><h6>卖盘</h6></th></tr>
<tr ><th>09:52:18</th><td>16.79</td><td>+10.03%</td><td>--</td><td>16</td><td>26,864</td><th><h6>卖盘</h6></th></tr>
<tr ><th>09:52:08</th><td>16.79</td><td>+10.03%</td><td>--</td><td>10</td><td>16,790</td><th><h6>卖盘</h6></th></tr>
<tr ><th>09:51:58</th><td>16.79</td><td>+10.03%</td><td>--</td><td>7</td><td>13,130</td><th><h6>卖盘</h6></th></tr>
<tr class="medium"><th>09:51:43</th><td>16.79</td><td>+10.03%</td><td>--</td><td>60</td><td>100,740</td><th><h6>卖盘</h6></th></tr>
<tr ><th>09:51:38</th><td>16.79</td><td>+10.03%</td><td>--</td><td>5</td><td>8,395</td><th><h6>卖盘</h6></th></tr>
<tr ><th>09:51:33</th><td>16.79</td><td>+10.03%</td><td>--</td><td>34</td><td>57,086</td><th><h6>卖盘</h6></th></tr>
<tr ><th>09:51:23</th><td>16.79</td><td>+10.03%</td><td>--</td><td>2</td><td>3,358</td><th><h6>卖盘</h6></th></tr>
<tr ><th>09:51:18</th><td>16.79</td><td>+10.03%</td><td>--</td><td>7</td><td>11,753</td><th><h6>卖盘</h6></th></tr>
<tr ><th>09:51:08</th><td>16.79</td><td>+10.03%</td><td>--</td><td>5</td><td>8,395</td><th><h6>卖盘</h6></th></tr>
<tr ><th>09:51:03</th><td>16.79</td><td>+10.03%</td><td>--</td><td>16</td><td>26,864</td><th><h6>卖盘</h6></th></tr>
<tr ><th>09:50:58</th><td>16.79</td><td>+10.03%</td><td>--</td><td>2</td><td>3,358</td><th><h6>卖盘</h6></th></tr>
<tr ><th>09:50:53</th><td>16.79</td><td>+10.03%</td><td>--</td><td>7</td><td>11,753</td><th><h6>卖盘</h6></th></tr>
<tr ><th>09:50:43</th><td>16.79</td><td>+10.03%</td><td>--</td><td>59</td><td>99,061</td><th><h6>卖盘</h6></th></tr>
<tr ><th>09:50:38</th><td>16.79</td><td>+10.03%</td><td>--</td><td>26</td><td>43,654</td><th><h6>卖盘</h6></th></tr>
</tbody>
</table>
<div style="height:40px;line-height:40px;text-align:right;padding-right:10px;color:#4F4F4F;">明细下载(今天成交明细晚七点以后提供下载)</div>
</div>


.......
}
main();
generateNav();
//]]>
</script>

</html>


怎么在c++ builder 6中用正则表达式提取下面内容:
从<tbody>到</tbody>中间的那一大段。
各位大哥大姐请帮忙!
...全文
193 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
youmosheng 2010-09-02
  • 打赏
  • 举报
回复
波波谢谢啊!准备结贴了!问下如果用正则表达式怎么匹配tr><th>09:58:58</th><td>16.79</td><td>+10.03%</td><td>--</td><td>30</td><td>50,370</td><th><h6>卖盘</h6></th></tr>
中的09:58:58,16.79,>+10.03% ,-- ,30 ,50,370 ,卖盘
再就是请教下怎么在cb6里面装boost

顺便谢谢梨子哥的指点!
zzbinfo 2010-09-01
  • 打赏
  • 举报
回复
代码来了
#include <msxmldom.hpp>
#include <XMLDoc.hpp>
#include <xmldom.hpp>
#include <XMLIntf.hpp>
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)
{
TMemoryStream *Filein = new TMemoryStream();
Filein->LoadFromFile("1.txt");
AnsiString Str1 = AnsiString((char *)Filein->Memory);
Str1 = "<?xml version='1.0' encoding='GBK'?> "+ Str1.SubString(Str1.Pos("<tbody>"),Str1.Pos("</tbody>")-Str1.Pos("<tbody>")+8);
delete Filein;

_di_IXMLDocument xml = NewXMLDocument("");
xml->LoadFromXML(Str1);

_di_IXMLNode root = xml->ChildNodes->Nodes[1];
for(int i =0 ;i < root->ChildNodes->Count;i++)
{
_di_IXMLNode node1 = root->ChildNodes->Nodes[i];
for(int j=0;j< node1->ChildNodes->Count-1;j++)
{
_di_IXMLNode node2 = node1->ChildNodes->Nodes[j];
if (node2)
ShowMessage(node2->GetText());//你要的数据,自己处理
}
_di_IXMLNode node3 = node1->ChildNodes->Nodes[node1->ChildNodes->Count-1];
_di_IXMLNode node4 = node3->ChildNodes->Nodes[0];
if (node4)
ShowMessage(node4->GetText());//你要的数据,自己处理
}

}
//---------------------------------------------------------------------------
zzbinfo 2010-09-01
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 zzbinfo 的回复:]
给你说个我的思路啊,你需要的这部分数据,你整理出来以后就是类似这个样的
<tr ><th>09:50:43</th><td>16.79</td><td>+10.03%</td><td>--</td><td>59</td><td>99,061</td><th><h6>卖盘</h6></th></tr>
你把其中的“卖盘”用英文字幕代替,这个用字符串替换完成,剩下的这部分你看像什么,可以用XML解……
[/Quote]
在开头加这个<?xml version='1.0' encoding='GBK'?> 就支持中文了
hemiya 2010-09-01
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 youmosheng 的回复:]

1楼的老大很弱的问下是不是要把boost装到cbuilder 6里面去呢!具体怎么操作呢!

2楼的波波能帮忙把具体的正则表达式子写下吗?因为今天才刚了解正则表达式,语法太多感觉记不住,谢谢了哈!源文件的地址 http://vip.stock.finance.sina.com.cn/quotes_service/view/vMS_tradedetail.php?symbol=sh60039……
[/Quote]
boost放到cb6的include目录下就行,我就是这么干的.
Regex库好像需要编译.我没有用过这个.
boost有帮助文档.
正则相当菜,正则帮不了你.
zzbinfo 2010-09-01
  • 打赏
  • 举报
回复
给你说个我的思路啊,你需要的这部分数据,你整理出来以后就是类似这个样的
<tr ><th>09:50:43</th><td>16.79</td><td>+10.03%</td><td>--</td><td>59</td><td>99,061</td><th><h6>卖盘</h6></th></tr>
你把其中的“卖盘”用英文字幕代替,这个用字符串替换完成,剩下的这部分你看像什么,可以用XML解析的,你试试看,有什么问题再说。代码看晚上有时间给你写个例子。
youmosheng 2010-09-01
  • 打赏
  • 举报
回复
1楼的老大很弱的问下是不是要把boost装到cbuilder 6里面去呢!具体怎么操作呢!

2楼的波波能帮忙把具体的正则表达式子写下吗?因为今天才刚了解正则表达式,语法太多感觉记不住,谢谢了哈!源文件的地址 http://vip.stock.finance.sina.com.cn/quotes_service/view/vMS_tradedetail.php?symbol=sh600390
youmosheng 2010-09-01
  • 打赏
  • 举报
回复
是啊!怎么用字符串匹配呢!能说具体点吗?我是菜鸟
zzbinfo 2010-09-01
  • 打赏
  • 举报
回复
你是想读里面那部分的数据吧,你用字符串匹配,把里面的数据就能读出来了
hemiya 2010-09-01
  • 打赏
  • 举报
回复
没用正则表达式干过.
都是直接自己分析,写代码提取的.

boost库中有个正则库Regex

13,826

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧