100分求一正则表达式

逍遥_WX 2007-03-14 11:33:47
提取页面的中的url

类似以下html代码
<a href="aaa.htm">title</a>
<a href='aaa.htm'>title</a>
<a href=aaa.htm>title</a>
<a href= aaa.htm >title</a>
求一正则表达式,能把链接地址aaa.htm以及后面的title提取出来
...全文
267 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
flashtong 2007-03-14
  • 打赏
  • 举报
回复
你自己把这个修改一下就行了
aRE = '(?i)'
+ '(\<a href\=(\"?|\''?|\s?)?((\w*\:*\/\/)?(\w*\.*\w*\/*)*)?(\"?|\''?|\s?)?\>)(\w*)(\<\/a\>)?';

逍遥_WX 2007-03-14
  • 打赏
  • 举报
回复
测试了一下,好象类似
<a href="http://www.xxx.com/abc.htm">abc</a>
<a href="../abc.htm">abc</a>
都不行了

另外get参数也需要的
flashtong 2007-03-14
  • 打赏
  • 举报
回复
//刚才没有看清除题目,楼主还要求提取URL地址,更改如下:
procedure Geta(aHtmlStr: string; T: Tstringlist);
const
aRE = '(?i)'
+ '(\<a href\=(\"?|\''?|\s?)?(\w*\.\w*)?(\"?|\''?|\s?)?\>)(\w*)(\<\/a\>)?';
var
r: TRegExpr;
begin
r := TRegExpr.Create; // Create object
try
r.Expression := aRE;
if r.Exec(aHtmlStr) then
begin
repeat
t.Add(r.Match[3]+','+r.Match[5]);
until not r.ExecNext;
end;
finally
r.Free;
end;
end;
//提示:
//1.本表达式不能提取包含get参数的URL地址,如果楼主要求,请说明
//2.不能直接复制表达式到其他语言环境中.单引号''缘故.
//3.regExpt单元必须下载才能在delphi下使用正则表达式的,delphi不支持正则表达式
//4.楼主问题解决了就赶紧揭帖给分.因为你的信誉分不怎么样.
flashtong 2007-03-14
  • 打赏
  • 举报
回复
uses
regExpt
///////
procedure Geta(aHtmlStr: string; T: Tstringlist);
const
aRE = '(?i)'
+ '(\<a href\=(\"?|\''?|\s?)?\w*\.\w*(\"?|\''?|\s?)?\>)(\w*)(\<\/a\>)?';
var
r: TRegExpr;
begin
r := TRegExpr.Create; // Create object
try
r.Expression := aRE;
if r.Exec(aHtmlStr) then
begin
repeat
t.Add(r.Match[4]);
until not r.ExecNext;
end;
finally
r.Free;
end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var T: tStringlist;
begin
T := tStringlist.create;
try
Geta(memo1.Text, t);
memo2.Lines.Assign(t);
finally
t.Free;
end;
end;
//经过测试,能够实现,另外,如果href 后面有get参数的话,必须重新写表达式.
lhpapa 2007-03-14
  • 打赏
  • 举报
回复
帮忙顶下,等待高手出现
dovelee 2007-03-14
  • 打赏
  • 举报
回复
我也有类似问题,关注

16,748

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 语言基础/算法/系统设计
社区管理员
  • 语言基础/算法/系统设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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