文章详细的介绍了关于html标签的几个特别的特点,然后根据它们特点作出相对应的处理,下面是一个不错的实例,有需要的同学看看。
html标签有以下几个特别的特点:
1. 如果有属性,那么它之前肯定有空格。
2. 收尖括号的前面一定是双引号,或者双引号加上少许空格
根据这两个特点,我写了一个最蛋疼的html标签的正则表达式如下:
| 代码如下 |
|
|
@"<(!|/)?w+( ((.|n)*?"")?)? *>"
|
第二个问号是指贪婪模式找到收尖括号即停止,
第三个问号是指如果出现属性,则一定是以双引号结尾的,
第四个问号是指有可能不出现属性。
第一个空格是指第一个属性的前面有一个空格,
第二个空格指的是最后一个属性的后面可能会有空格。
这里面出现了两个双引号的并列,那就是双引号在有@符号里面的写法,并非",而要写成""。
这个标签能完美匹配上面的那个例子,以及我爬网页时出现的其它各种情况。
实例
| 代码如下 |
|
|
<textarea id="htmlCode" rows="5" cols="50">
<namespace:span id="1">'
>" name= spanName />
<span id="2">
<span id="3" />
<span id="4">
<span></span>
</span>
<span id="6" />
<div></div>
</span>
<div>
<div></div>
</div>
<span id="5"></span>
</textarea>
<br />
<script>
function htmlTag()
{
re = /<(/s*)?((w+:)?w+)(w+(s*=s*((["'])(\["'tbnr]|[^7])*?7|w+)|.{0})|s)*?(/s*)?>/ig
return htmlCode.value.match(re)
}
</script>
<button onclick="alert(htmlTag().join('n------------------------------------n'))">匹配</button>
|
我也只能写成这样了有更好方法的朋友可以给建义