高分征求一段"正则表达式" ( 积分: 100 )

  • 主题发起人 benhacker
  • 开始时间
B

benhacker

Unregistered / Unconfirmed
GUEST, unregistred user!
朋友们,不知道大家有没有听过 正则表达式一词,没听过不要紧,跟着我关注一下,就当个学习,我现在遇到一个问题,要从html中提取我指定的字符串,如下面代码中:

<B>我是中国人</B> <B>没事偷着乐</B> <B>i love you</B>

以上代码中,我要求用正则表达式取出<B>和</B>的字符串(不抱括<B>和</B>),也就是三串字符&quot;我是中国人 没事偷着乐 i love you&quot;,切记,是用正则表达式,在这里我说的只要知道方法,实际上我要求对字符串的处理远比这个复杂.只是想知道如何有正则表达式取出中间那段不规则的字符串.谢谢.
 
作者?: kidneyball
标题?: 关于在DELPHI6中使用正则表达式的一些心得 http://www.delphibbs.com/keylife/iblog_show.asp?xid=25712

我是从kidneyball的笔记上学的,写得蛮清楚得控件文件里有联接下载.
 
<B>(.*?)</B>
 
楼上的兄弟给的表达式取出的字符包括了<B></B>在内,这正是我为之烦脑的问题,如何才能不取两边呢?只取中间.
 
这个……


好像不需要正则表达式吧,直接替换字符串,把<B> 替换为&quot;&quot;,</B>替换为&quot;&quot;不行?
 
(?<=<B>).*?(?=</B>)
 
以上代码在 Nuva 语言中测试通过
 
dreamfly1024说的表达式,我直接运行是不行的,后改成这样(?=<B>).*?(?=</B>),输出结果是:
<B>我是中国人
<B>没事偷着乐
<B>i love you

也就是说,后面的</B>是解决了,但前面的<B>为什么还在呢.请明示.
 
tttttttttt
 
来自:轻舞肥羊, 时间:2007-2-8 15:53:33, ID:3667835
<B>(.*?)</B>

这个就行
你按 &quot;分组&quot; 取即可了

另外 过滤前面的 <B> 和 后面的 </B>
大部分引擎只支持一端过滤,

C# 支持前后都过滤.
 
也就是说,后面的</B>是解决了,但前面的<B>为什么还在呢.请明示.
----------------------------------
再替换一次不就得了。
 
正则引擎不同导致的.
在 Delphi 中, 建议使用 PCRE 的 Delphi 7 封装.
该引擎支持我写的表达式 :)

另, 分组是一种最简便的方式, 几乎大多数引擎都支持.
偶尔分组不方便, 才使用我写的表达式.
 

Similar threads

回复
0
查看
865
不得闲
回复
0
查看
671
不得闲
回复
0
查看
821
不得闲
D
回复
0
查看
738
DelphiTeacher的专栏
D
顶部