一段文字,怎样才能正常取出这段文字当中的(只要求)IP或域名即可,, (100分)

  • 主题发起人 淡淡的笑
  • 开始时间

淡淡的笑

Unregistered / Unconfirmed
GUEST, unregistred user!
一段文字,怎样才能正常取出这段文字当中的(只要求)IP或域名即可,,
求一个比较好的方法..dephi不支持正则表达式,,真不爽 -_-
(要求用标准的pascal语句完成,不要用正则表达式的控件)
文字 为 普通文字. 文本格式,,,
顺便问一下,比较好的正则表达式的控件哪有下载? 名字? 谢谢
///////////////////
来自:淡淡的笑, 时间:2002-8-26 15:07:00, ID:1287908 | 编辑
普通文字. 文本格式,,,都说尽量不用正则表达式乐 :)
我用集合判断,算得我头晕眼花... 只要求取得IP或域名即可,,
比如一段文本:
请点击http://xxx.com/1/1.zip, http://xxx2.com/test.zip
我只要取出"xxx.com"这个字符串,首先我想先取第一个"//"和"/"之间的就对了,但这样有误差,,比如:
里面有干扰的 //只是捣乱/ ,,这边才是真的,http://www.54bb.com/test/1.zip
这取得就会有错,我加了非法字符和"."的判断,,但还是不够准确 -_-
又加了以各种协议开头的都是正确的比如:http:// ftp:// mms:// ,,但不排除文本中包含了
www.ozcbb.com/1.zip 这样的,(即没有以http://,ftp等开头)

 
如果网址本向存在于 HTML 文档中,用 DHTML do
M 比较好处理。
因为在DHTML do
M中,所有的<A>只是其中的对象,而且该对象有
各种属性,想取什么都可以。
如果非要文字匹配,就用正则表达式。
 
普通文字. 文本格式,,,都说尽量不用正则表达式乐 :)
我用集合判断,算得我头晕眼花... 只要求取得IP或域名即可,,
比如一段文本:
请点击http://xxx.com/1/1.zip, http://xxx2.com/test.zip
我只要取出"xxx.com"这个字符串,首先我想先取第一个"//"和"/"之间的就对了,但这样有误差,,比如:
里面有干扰的 //只是捣乱/ ,,这边才是真的,http://www.54bb.com/test/1.zip
这取得就会有错,我加了非法字符和"."的判断,,但还是不够准确 -_-
又加了以各种协议开头的都是正确的比如:http:// ftp:// mms:// ,,但不排除文本中包含了
www.ozcbb.com/1.zip 这样的,(即没有以http://,ftp等开头)
 
不知道这样可不可以
var
S,K: string;
n,i: Integer;
begin
S:=该段文本;
n:=pos('http://',s);
n:=n+7;
for i:=n to lengt(S) do
begin
if S='/' then
break;
K[i-n]:=S;
// K就是域名
end;
end;
 
以'http://'为判断字串就行了
 
两位,,没仔细看这个题,,, -_-
 
这个过程应该是可以实现的,
我觉得你这个题解法应该这样(假设你的串中只有一个URL可分解出来):
1、 pos('.',str);
找出有可能是URL的位置。
2、 分两半(Before和After),进行处理。
依次判断当前的字符是不是合法的URL字符集: 字母、数字、-、_ 等等

比如:
function Parse(const str1: string): string;
var
temp: string;
i,position: integer;
begin
position := pos('.',str1);
temp := '.';
for i:= position-1 do
wnto 0 do
begin
if str1 in ['a'..'z','A'..'Z','0'..'9','-','_','.'] then
temp := str1+temp
else
break;
end;
for i:=position+1 to strlen(PChar(str1)) do
begin
if str1 in ['a'..'z','A'..'Z','0'..'9','-','_','.'] then
temp := temp+str1
else
break;
end;
if strlen(PChar(temp)) = 1 then
Result := ''
else
Result := temp;
end;

如果想把多个URL全找出来的话,就把字串分段吧!
 
你难道没想过通过'.'判断吗?把'.'和'/'结合起来就可以了。
 

Similar threads

S
回复
0
查看
957
SUNSTONE的Delphi笔记
S
S
回复
0
查看
1K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
2K
DelphiTeacher的专栏
D
顶部