欢迎来到Doc100.Net免费学习资源知识分享平台!
您的位置:首页 > 程序异常 >

求正则: 在html的“纯文字”中查找并替换某几个目标字符串,该怎么解决

更新时间: 2014-01-05 01:52:45 责任编辑: Author_N1

 

求正则: 在html的“纯文字”中查找并替换某几个目标字符串
要求如下:
查找范围:html的纯文字中,不包括“标签文字”,
查找并替换的目标字符串:例如下例中我要查找并替换 p 字符和 123 字符串,分别替换成<span class="高亮显示的文字">p</span>,<span class="高亮显示的文字">123</span>

例子:
作为查找大范围的html:
HTML code

<img src="文件名中包含p字符.gif" alt="" /> 
<p>纯文字中包含p字符
   <img src="文件名中包含p字符.gif" alt="" /> 
</p>
   纯文字中包含123字符串
  <img src="文件名中包含123字符串.gif" alt="" /> 


  
查找时,就只能在 纯文字中包含p字符 和 纯文字中包含123字符串 这两个字符串中查找并替换目标字符串。

<p> 这个字符串代表着一个标签,因此,虽然它包含有要查找的 p 字符,但查找时忽略它。

还有img标签中的src值为文件名中包含p字符.gif,虽然也包含有要查找的 p 字符,但查找时也忽略它,因为目标字符仍然处在“标签”中。

求高手给出 正则表达式 的写法.

我写了下边的正则表达式:
VB code

((?:<[^>]+>)*[^<>]*)(p|123)([^<>]*(?:<[^>]+>)*)



但是,我的这种写法是有问题的,得不到正确结果.
我的想法是:每个匹配由3个“组“ 构成,如下:
((?:<[^>]+>)*[^<>]*)
(p|123)
([^<>]*(?:<[^>]+>)*)
,其中第二个“组”就是我要找的p 字符和 123 字符串。
第一个组是“查找目标”之前的部分,第三个组是“查找目标”之后的部分。

找到每个匹配之后,仅仅替换第二个“组”,第一个“组”和第三个“组”保持不变。
vb替换语句:
VB code
objRegExp.Replace(entire_string,"$1<span class='高亮显示的文字'>$2</span>$3")



这种写法:得到的第一个匹配是:img src="文件名中包含p字符.gif" alt="" /,也就是第一个img标签中的字符串,这显然不是我要得到的。

下面是vb代码:
VB code
Set objRegExp = New Regexp '设置匹配对象
objRegExp.IgnoreCase = True '忽略大小写
objRegExp.Global = True '设置为全文搜索

string_of_RegExp="((?:<[^>]+>)*[^<>]*)(p|123)([^<>]*(?:<[^>]+>)*)" '正则表达式
objRegExp.Pattern=string_of_RegExp
  
entire_string=objRegExp.Replace(entire_string,"$1<span class='高亮显示的文字'>$2</span>$3")
'entire_string是html字符串


--参考方法--
VBScript code

Set objRegExp = New Regexp
objRegExp.IgnoreCase = True
objRegExp.Global = True
objRegExp.Pattern = "(p|123)(?![^<]*>)"

entire_string = objRegExp.Replace(entire_string, "<span class='高亮显示的文字'>$1</span>") 			
			
		
上一篇:上一篇
下一篇:下一篇

 

随机推荐程序问答结果

 

 

如对文章有任何疑问请提交到问题反馈,或者您对内容不满意,请您反馈给我们DOC100.NET论坛发贴求解。
DOC100.NET资源网,机器学习分类整理更新日期::2014-01-05 01:52:45
如需转载,请注明文章出处和来源网址:http://www.doc100.net/bugs/t/2428/
本文WWW.DOC100.NET DOC100.NET版权所有。