正则表达式的应用-检测 email 地址 (0分)

  • 主题发起人 主题发起人 yysun
  • 开始时间 开始时间
Y

yysun

Unregistered / Unconfirmed
GUEST, unregistred user!
所谓正则表达式 (regular expressions),就是用一个模板字符串,去匹配一段文本,
从该段文本中提取符合某种规律的文字。
http://www.ciser.cornell.edu/info/regex.html
http://py-howto.sourceforge.net/regex/regex.html
这是检测一段文本中的 email 地址的正则表达式:
[/w/d/-/.]+@[/w/d/-]+(/.[/w/d/-]+)+
现在 几乎所有编程语言都有正则表达式的支持库,我已经在 Java, C/C++, Delphi,
ASP, Python, PHP, Perl 中已经发现它了 ;)
JDK 1.4 中将包括 java.util.regex 专门处理。
http://java.sun.com/j2se/1.4/docs/api/java/util/regex/Pattern.html
 
Delphi也有控件支持正则表达式
 
hubdog,好久不见,可好? [:)]
是的,97年就出现了支持正则表达式的程序 for Delphi 2 (那时我还不懂它).
现在我用的是:俄国人写的 TRegExpr,http://anso.virtualave.net/index.htm
 
yysun: 可不可以把各种语言中的支持正则表达式的func或proc列表一下呢?
用控件只能知道有这么回事,但不会明白原理的。
 
不管什么语言,用正则表达式一般可以做三种事请:
1、匹配 match,就是从一段文本中,查找符合某种规律的子串。比如找 url 地址
2、替换 replace,就是把找到的子串换成其他内容。比如把找到 url 地址换成
<a href=$1>$1</a>,就实现了自动 url 识别
3、分割 split,就是按找到的子串,将文本分割成几部分。
您可以去找 match, replace 和 split。另外正则表达式语法是统一的。与编程语言无关。
 
yysun老师
可否给我一个从文本文件中提取Email的原程序呢?包括使用了哪个控件?
谢谢
liren.z@163.com
 
控件往上看:我不是已经给出下载地址了吗? 那个下载包里有范例源程序。
这里有个 Javascript 的程序
function chkEMailLinks(theString) {
theString = theString.replace(//bmailto:([/w+/-/'/#/%/./_/,/$/!/+/*]+@[/w+/.?/-/'/#/%/~/_/./;/,/$/!/+/*]*)/gi,"<a href=/"mailto/:$1/">$1</a>");
return theString;
}
 
孙老师
http://anso.virtualave.net/index.htm
这个地址我访问不了呀!请您帮我
liren.z@163.com
 
谢谢您了
我在www.torry.ru找到了
 
没想到Delphi里也有正则表达式,以后处理字符串容易了
thank yysun
 
虽然是yysun老大的,但时间太久了,sorry了
 
tply + glyd
前者是生成引擎,后者是编辑工具,如果只是分析正则式的话,只要写lex部分就可以了。
有例子,有模板,使用方便。
怎么好像我在做广告??
 
其实找就在用的了,不过是在linux下面,bash,perl,python,好多里面都有,
例如在命令行替换文章中所有的'delphi
sed '1:$s/delphi/DELPHIBBS/g' tmp.txt >newtext.ini
写CGI,makefile等东西的时候非常方便。
 
如何用正则表达式限制输入即按规定的格式输入?
在delphi中用yysun说的TRegExpr,该如何来实现?
1.限制输入的都是数字(不限位数);
2.限制输入的都是小数
注意是对输入的全部字符串.而不是部分匹配.急盼高人们指点菜鸟一二!!!
谢谢
 
谁有delphi正则表达式检查EMAIL地指
 
孙老师说的那个对象就可以的,他的例子程序里有演示
 
这个帖子这么久?这是太难得了.
 
在这里给孙老师以及楼上的各位拜年。祝福大家新年快乐。
 
over,给分。
 
如何用正则表达式从一个文本中提取所有的email地址?
代码应该怎样写?
我也想知道,我留意这个问题都很久了,以下是一些DFW的回答:
问题:如何从文件中提取含EMail地址呢 ( 积分:100, 回复:9, 阅读:188 )
分类:局域网 / 通讯 ( 版主:卷起千堆雪tyn, cAkk )
来自:goddy, 时间:2002-8-13 15:50:00, ID:1261606 [显示:小字体 | 大字体]
如何从文件中提取含EMail地址呢


来自:naughtboy, 时间:2002-8-13 15:57:00, ID:1261618
查找"@"字符,而且email地址和其他文字只见一定要隔开,否则呵呵..
比如 naughtboy@163.com一定要和后面的文字分开


来自:cxz9, 时间:2002-8-13 17:55:00, ID:1261993
用正则表达式呀
[_a-zA-Z/d/-/.]+@[_a-zA-Z/d/-]+(/.[_a-zA-Z/d/-]+)+


来自:哈利波特, 时间:2002-8-13 18:31:00, ID:1262119
应该要分开吧


来自:天与地, 时间:2002-8-13 18:34:00, ID:1262128
从文档里分离,有什么好办法吗?估计挺烦的。
能不能从设计思路上调整一下,不让Mail混在文档里面?



来自:goddy, 时间:2002-8-20 14:35:00, ID:1275966
我自己搞定了﹐大家有什么好建意﹐提一提
#include <stdio.h>
String GetEmail(String FileName)
{
FILE *in, *in1;
char readchar;
char readchar1;
String EMailAddr="";
String StrEMailAddr="";
if ((in = fopen(FileName.c_str(), "rb"))== NULL)
return "";
if ((in1 = fopen(FileName.c_str(), "rb"))== NULL)
return "";
fseek(in, 0L, SEEK_END);
int length= ftell(in);
fseek(in, 0L, SEEK_SET);
fseek(in1, 0L, SEEK_SET);
for( int i=0;i<length;i++)
{
fread(&amp;readchar,sizeof(readchar),1,in);
if(readchar=='@')
{
fseek(in1, i-1, SEEK_SET);
fread(&amp;readchar1,sizeof(readchar1),1,in1);
int j=2;
while((readchar1>='0'&amp;&amp;readchar1<='9')||(readchar1>='a'&amp;&amp;readchar1<='z')||(readchar1>='A'&amp;&amp;readchar1<='Z')||readchar1=='_'||readchar1=='.')
{
if((i-j)<=0)
break;
fseek(in1, i-j, SEEK_SET);
j++;
fread(&amp;readchar1,sizeof(readchar1),1,in1);
}
if(j>3)
{
fread(&amp;readchar1,sizeof(readchar1),1,in1);
while((readchar1>='0'&amp;&amp;readchar1<='9')||(readchar1>='a'&amp;&amp;readchar1<='z')||(readchar1>='A'&amp;&amp;readchar1<='Z')||readchar1=='_'||readchar1=='.'||readchar1=='@')
{
if((readchar1>='0'&amp;&amp;readchar1<='9')||(readchar1>='a'&amp;&amp;readchar1<='z')||(readchar1>='A'&amp;&amp;readchar1<='Z')||readchar1=='_'||readchar1=='.'||readchar1=='@')
EMailAddr+=AnsiString(readchar1);
fread(&amp;readchar1,sizeof(readchar1),1,in1);

}
if(EMailAddr.Length()>7&amp;&amp;EMailAddr[EMailAddr.Length()]!='@'&amp;&amp;EMailAddr[EMailAddr.Length()]!='.')
StrEMailAddr+=","+ EMailAddr;
EMailAddr="";
}
}
}
fclose(in);
fclose(in1);
return StrEMailAddr;
}
=========================================================
来自:飞来石, 时间:2002-8-20 17:13:00, ID:1276353
function IsEMail(EMail: String): Boolean;
var
s: String;
ETpos: Integer;
begin

ETpos:= pos('@'
EMail);
if ETpos > 1 then

begin

s:= copy(EMail
ETpos+1
Length(EMail));
if (pos('.'
s) > 1) and (pos('.'
s) < length(s)) then

Result:= true else
Result:= false;
end
else

Result:= false;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin

if isemail(Edit1.Text) then

begin

ShowMessage('eMail-Adresse!');
end;

end;
 

Similar threads

后退
顶部