标签:
正则表达式的引擎主要由2种:NFA和DFA。
java的正则基于的是NFA,表达式主导,匹配成功即成功,正则nfa|nfa not匹配字符串nfa not的结果是nfa。
DFA是文本主导,会记录所有的匹配。
使用正则表达式时需要注意回溯,否则可能会导致栈溢出。下面是一个例子程序:
String str2 = "<div class=\"ITinfo\">" + "<ul class=\"ITinfo_ul\">" + "<li style=\" font-size:14px;\"><a href=\"../Board/Detail.asp?NewsID=001-0329\"><B><font color=\"red\">OA移动版本APP下载</font></B></a></li>" + "<li><a href=../Board/Detail.asp?NewsID=001-0584><font color=#000000>OA系统菜单权限模块调整通知</font></a></li><li><a href=../Board/Detail.asp?NewsID=011-0048><font color=#000000>IE10/11时间显示、附件上传解决..</font></a></li><li><a href=../Board/Detail.asp?NewsID=011-0051><font color=#000000>SSL VPN版本升级通知</font></a></li><li><a href=../Board/Detail.asp?NewsID=011-0050><font color=#000000>OA手机版切换完成</font></a></li><li><a href=../Board/Detail.asp?NewsID=001-0557><font color=#000000>关于使用域账号登录OA系统及密..</font></a></li><li><a href=../Board/Detail.asp?NewsID=001-0555><font color=#000000>K3/MES系统维护通知</font></a></li>" + "</ul>" + "<div class=\"ITinfo2\">" + "<form action=\"../tel/Tel_List.asp\" type=\"post\" name=\"query\" id=\"query\" onsubmit=\"return CheckForm(this)\">" + "<center><input name=\"content\" id=\"content\" type=\"text\"><br />" + "<input type=\"image\" src=\"js/img/input2.jpg\" style=\"margin-top:2px;margin-top:4px !important;\" /></center>" + "</form>" + "</div>" +"</div>"; //<div[^>]*>(.*?|\n*|\r*)*</div> ==>Exception in thread "main" java.lang.StackOverflowError Pattern p2 = Pattern.compile("<div[^>]*>([\\s\\S]*?)</div>"); Matcher m2 = p2.matcher(str2); while(m2.find()){ for(int i=0;i<= m2.groupCount();i++){ System.out.print("[" + m2.group(i) + "]"); } System.out.println(""); } }
标签:
原文地址:http://www.cnblogs.com/lnlvinso/p/4823203.html