html匹配
<HTML> <HEAD> <TITLE> New Document </TITLE> <META NAME="Generator" CONTENT="EditPlus"> <META NAME="Author" CONTENT=""> <META NAME="Keywords" CONTENT=""> <META NAME="Description" CONTENT=""> </HEAD> <BODY> <SCRIPT LANGUAGE="javaScript"> <!-- //去掉字串中的空格 function NoSpace(txt){ return (txt.replace(/[\s]+/g,'')) } //判断<aaa>与</aaa>是配对的html标签 function IsGood(txt1,txt2){ var txt='<'+'/'+txt1.substr(1); return (txt==txt2)?1:0; } function chk(){ //s为模拟的html代码 //var s="d<html>fg<table>sdfg<img><tr>asdfg<td>6456</td>dfg</tr>dsfg</table>d</html>fg"; var s=NoSpace(oT.value).toLowerCase(); var arrMinus=new Array('<img>','<input>','<meta>','<hr>'); for (var i=0;i<arrMinus.length;i++){ s=s.replace(arrMinus[i],''); } var arrElement=s.match(/<[/|A-Za-z]+>/ig);//取出所有的<....>格式的字串 var stack=new Array(); stack[0]='#';k=0;//定义一个顺序栈,栈底放入#,k为栈顶指针 for (var j=0;j<arrElement.length;j++){ if (IsGood(stack[k],arrElement[j])) {k--;stack.length--;}//如果配对,栈顶元素出栈 else {stack[++k]=arrElement[j];}//如果不配对,新标签入栈 alert(stack[k]);//演示栈顶的内容 } (stack[k]=="#")?(document.write("所有的标签匹配")):(document.write("有的标签不匹配")); } //--> </SCRIPT> <TEXTAREA NAME="oT" ROWS="10" COLS="90"> <HTML> <META> <HEAD> <TITLE> New Document </TITLE> </HEAD> <BODY> <img><input> </BODY> </HTML> </TEXTAREA> <BR><BR> 原理:建一个栈,每次碰到一个新标签,就与栈顶的标签配对,如果配对,栈顶的标签就出栈,如果不配对,这个新标签就进栈,最终,栈如果是空的,说明所有的标签都是配对的,如果栈不空,说明有不配对的地方<BR> 框中是模拟的html代码,你可以修改后,点下面的按钮,看是不是匹配。<BR> 弹出的对话框是演示栈顶的内容<BR> 特点:<BR>1、还不能判断<...>哪些是合法的html标签,可以在代码中直接输入合法标签,工作量太大。<BR>2、有的标签是不需配对的,如<img>,代码智能判断为匹配的。<BR>3、目前还不支持标签后加属性 <BR><BR> <INPUT TYPE="button" value="Start" onclick="chk()"> </BODY> </HTML> [Ctrl+A 全部选择 提示:你可先修改部分代码,再按运行]
② HTML中<%符号匹配的问题
<% %>里面不能再套<% %>符号了。
<%= %> 的作用是向页面输入变量的值。
如果在<% %>里面用变了就不用<%= %>这个,直接把变量写到=后面就可以了。
如果前面用<%=arr.length()%>可以输出,那么你这段直接这样写就行了
var length = arr.length();
③ 写一个正则,匹配html中所有的class
<script type="text/javascript">
//获取的html内容不知道为什么会有script标签内的内容。。。。可以用jQuery试试
var str =document.getElementsByTagName("body")[0].innerHTML;
var strArr = str.match(/class="(\S*)"/g);
for(var i=0;i<strArr.length;i++){
document.write("Result: " + strArr[i]+"</br>");
}
</script>
④ 急求匹配HTML中指定内容的正则表达式
|用正则实现比较复杂,如果是.net平台的话,可以用平衡组完美实现。
<ul\s+id="list"\s+class="lsits">((((?!<ul\b|</ul>)[\s\S])*(?<open><ul\b[^>]*>))+(((?!<ul\b|</ul>)[\s\S])*(?<-open></ul>))+)*(?(open)(?!))((?!<ul\b|</ul>)[\s\S])*</ul>
解释:
<ul\s+id=""list""\s+class=""lsits""> #匹配开头的ul
((((?!<ul\b|</ul>)[\s\S])* #匹配<ul>和</ul>之间的字符
(?<open><ul\b[^>]*>))+ #匹配到<ul则进栈
(((?!<ul\b|</ul>)[\s\S])* #匹配<ul>和</ul>之间的字符
(?<-open></ul>))+ #匹配到</ul则出栈
)* #匹配可以重复N次
(?(open)(?!)) #判断如果栈不为空,<ul>和</ul>数量不匹配则匹配失败
((?!<ul\b|</ul>)[\s\S])*</ul> #匹配结尾的字符以及</ul>
这个正则式可以正确配对<ul>的,缺点是必须在C#.net VB.net等.net平台上运行。
如果不用.net,那么没有完美的方法。
但是如果你能确定<ul id="list" class="lsits">和</ul>之间有几对嵌套的<ul>
或者如果没有多重嵌套的正则的话,也可以有相应的严格正则。
我先就你上面的文本举个例子:
<ul\s+id="list"\s+class="lsits">[\s\S]*?<ul\b[^>]*>[\s\S]*?</ul>[\s\S]*?</ul>
解释:
<ul\s+id="list"\s+class="lsits">
[\s\S]*?<ul\b[^>]*>
[\s\S]*?</ul>
[\s\S]*?</ul>
因为你上面的文本里只嵌套了一个<ul>,所以我就只匹配这个ul,多了不要,问号表示懒惰匹配~
⑤ 如何匹配html节点
window.onload=function(){
varall=document.getElementsByTagName('*'),
a=null;
for(vari=0,len=all.length;i<len;i++){
if(/a/.test(all[i].id)){
a=all[i];
}
}
if(a){
alert(a.innerHTML);
}
}
⑥ 正则表达式怎么匹配html标签
/<[^>]*>/g
其实直接网络一下就可以找到更多细致的匹配方法了
⑦ 正则表达式匹配html标签
给你一个例子,自己模仿着写吧,
匹配一个div标签的正则表达式:"<div>[^<]*</div>"这个基本可以满足回,标签答之间一般不会出现<,
如果要求严谨
完整的写法应该是 “<div>[^<]*[^d]*[^i]*[^v]*[^>]*</div>”这个可以都匹配。
真实可用,望点赞。
⑧ 正则表达式在html中匹配数据
<td[^>]*>(\\d{3}-\\d{10})</td>
这个是java的正则,可以匹配“td标签里面的‘3位数字-10位数字’”,非td标签里面的不算,不是3-10形式数字的不算。
其他语言的正则写法同理。
⑨ 正则表达式匹配html
不知道你用的什么语言,有支持正则替换的函数就行,给你java的做个参考
public static void main(String[] args) {
String s = ".<br><br><br>oh<a>no</a><br><br>my<br>god<hr><hr>";
System.out.println("old:" + s);
s = s.replaceAll("(<[^>]+>)\\1+", "$1");//看这里的替换正则就明白了
System.out.println("new:" + s);
}
输出是:
old:.<br><br><br>oh<a>no</a><br><br>my<br>god<hr><hr>
new:.<br>oh<a>no</a><br>my<br>god<hr>