再次求:字符串的正则表达式写法

电脑爆 2006-07-05 12:20:18
有一个字符串:http://www.abcde.com/*.htm
"*"号代表通配符,代表任意个任意字符。

我想用正则表达式在一个网页的HTML代码中搜出所有的符合上述字符串条件的网址列表,
如:
http://www.abcde.com/aab.htm
http://www.abcde.com/ddce.htm
http://www.abcde.com/adfsdfa.htm
http://www.abcde.com/adddddddddd.htm
等。

这个只是简化的问题是,实际我要达到的目的比这个要复杂得多,所以必须要用正则表达式,急用,谢谢!
...全文
333 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
电脑爆 2006-07-11
  • 打赏
  • 举报
回复
keiy大侠,刚想结帖又发现一个问题:

如果我想要匹配HTML源码中所有
http://www.abc.com/aaa.asp?id=*
形式的网址,也就是*号在网址的最后而不是中间
有没有好的写法呀,我写的总是有点错误.
WingForce 2006-07-05
  • 打赏
  • 举报
回复
\(http://www.abcde.com/)[^/*](.htm)\

不知道对不对,哈哈
jaffy 2006-07-05
  • 打赏
  • 举报
回复
TRegexp r("http://www.abcde.com/.+\.[hH][tT][mM]");
为什么会有个"."呀?
keiy() 你上次的正则表达式我就看不懂,能不能说明一下.
TRegexp p("\\.[^\\.]+");
\\代表什么意思呀?
柯本 2006-07-05
  • 打赏
  • 举报
回复
没有完全理解楼主的要求,只能给你一个思路:
如有以下文件(e:\temp\t.txt):
<p>http://www.abcde.com/aab.htm
http://community.csdn.net/Expert/topic/4748/4748654.xml?temp=.1947443
http://www.abcde.com/ddce.htm
aaa
<a>http://www.abcde.com/adfsdfa.htm</a>
bbb
http://www.abcde.com/adddddddddd.htm
kkk
假设要找出所有
http://www.abcde.com/*.htm
可用以下程序:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
TStringList *p;
p=new TStringList();
p->LoadFromFile("e:\\temp\\t.txt");
// TRegexp r("http://www.abcde.com/[A-Za-z_0-9]+\.[hH][tT][mM]"); //如果对上面*的字符有限止,如26个字母+数字+下划线,可以这样写,否则按下面的
TRegexp r("http://www.abcde.com/.+\.[hH][tT][mM]");
int f;
unsigned l;
for(int i=0;i<p->Count;i++)
{
f=r.find(p->Strings[i].c_str(),&l);
if (f!=-1)
{
f++;
ShowMessage(p->Strings[i].SubString(f,l));
}
}
delete p;
}
daydayup234 2006-07-05
  • 打赏
  • 举报
回复
是吗,我没看贴主。
那么你搜索一下Aweay,他好象有个cb正则的blog.
电脑爆 2006-07-05
  • 打赏
  • 举报
回复
daydayup234(关中刀客)

你转的这个帖是我以前发的,真晕啊!现在的问题不是这样了啊,我字符串中的"*"号位置不是固定的,随便放在哪都能搜索出符合条件的才行.
daydayup234 2006-07-05
  • 打赏
  • 举报
回复
keiy大虾的,请看看:
http://community.csdn.net/Expert/topic/4748/4748654.xml?temp=.1947443
电脑爆 2006-07-05
  • 打赏
  • 举报
回复
哈哈,我就是从网上查一些资料用的不正确,很多他都不识别。

不过我这个问题应该是解决了。

先结帖吧,有问题我再单独问了,感谢keiy大侠的帮助。。
柯本 2006-07-05
  • 打赏
  • 举报
回复
另外,关于正则表达式的详细介绍:
http://soulogic.com/doc/RegularExpressions/
要注意的是,BCB的正则表达式是不完整的,它只能识别简单的正则表达式
如果要完整的使用正则表达式,建议安装boost库
柯本 2006-07-05
  • 打赏
  • 举报
回复
测试文件(t.txt):
<A href="http://www.softreg.com.cn/iew.aspx?id=/ADEA02D6-FE78/">软件名1</A>
akshdfaskf
<A href="http://www.softreg.com.cn/iew.aspx?id=/SDFGGGE6-FD33/">软件名2</A>
sdfl;ksd;lf
<A href="http://www.softreg.com.cn/iew.aspx?id=/BDSDFEEW-VD65/">软件名3</A>
sdflksdl;f;klsd
dls;flsd;fsd
sdfl;kdsl;fs

程序:

void __fastcall TForm1::Button1Click(TObject *Sender)
{
TStringList *p;
p=new TStringList();
p->LoadFromFile("e:\\temp\\t.txt");
TRegexp r("http://www.softreg.com.cn/iew.aspx\\?id=/[^/]+/");
int f;
unsigned l;
for(int i=0;i<p->Count;i++)
{
f=r.find(p->Strings[i].c_str(),&l);
if (f!=-1)
{
f++;
ShowMessage(p->Strings[i].SubString(f,l));
}
}
delete p;
}

----------------------------------------------------------------
C/C++的\\代表\
\是c/c++的转义符,也是正则表达式的转义符,如:要匹配一个".",正则表达式必须写成"\.",而在c/c++中必须写成"\\."
我上一贴的TRegexp r("http://www.abcde.com/.+\.[hH][tT][mM]");严格应该写成
TRegexp r("http://www.abcde.com/.+\\.[hH][tT][mM]");
由于"."也可匹配"\.",所以结果没问题,但它会匹配
http://www.abcde.com/sdfsdfhtm
当然,对于你现在的要求,无所谓了
-----------------------------------------------------------------------------------
电脑爆 2006-07-05
  • 打赏
  • 举报
回复
暂时还没有调试成功.

我的实际情况是这样的,有一个HTML代码文件,中间含有很多标签:如
<A href="http://www.softreg.com.cn/iew.aspx?id=/ADEA02D6-FE78/">软件名1</A>
<A href="http://www.softreg.com.cn/iew.aspx?id=/SDFGGGE6-FD33/">软件名2</A>
<A href="http://www.softreg.com.cn/iew.aspx?id=/BDSDFEEW-VD65/">软件名3</A>
等等.
当然实际上的没有这么工整的,会有长有短.

我想把里面的
http://www.softreg.com.cn/iew.aspx?id=/ADEA02D6-FE78/
http://www.softreg.com.cn/iew.aspx?id=/SDFGGGE6-FD33/
http://www.softreg.com.cn/iew.aspx?id=/BDSDFEEW-VD65/
提取出来.

请再帮我看一下吧,谢谢了!
电脑爆 2006-07-05
  • 打赏
  • 举报
回复
暂时还没有调试成功.

我的实际情况是这样的,有一个HTML代码文件,中间含有很多标签:如
<A href="http://www.softreg.com.cn/iew.aspx?id=/ADEA02D6-FE78/">软件名1</A>
<A href="http://www.softreg.com.cn/iew.aspx?id=/SDFGGGE6-FD33/">软件名2</A>
<A href="http://www.softreg.com.cn/iew.aspx?id=/BDSDFEEW-VD65/">软件名3</A>
等等.
当然实际上的没有这么工整的,会有长有短.

我想把里面的
http://www.softreg.com.cn/iew.aspx?id=/ADEA02D6-FE78/
http://www.softreg.com.cn/iew.aspx?id=/SDFGGGE6-FD33/
http://www.softreg.com.cn/iew.aspx?id=/BDSDFEEW-VD65/
提取出来.

请再帮我看一下吧,谢谢了!

13,825

社区成员

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

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