当前位置: 代码迷 >> vbScript >> 求正则: 在html的“纯文字”中查找并替换某几个目标字符串,该怎么解决
  详细解决方案

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

热度:1700   发布时间:2013-02-26 00:00:00.0
求正则: 在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 RegexpobjRegExp.IgnoreCase = TrueobjRegExp.Global = TrueobjRegExp.Pattern = "(p|123)(?![^<]*>)"entire_string = objRegExp.Replace(entire_string, "<span class='高亮显示的文字'>$1</span>")
  相关解决方案