亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > regex > 正文

Java/Js下使用正則表達式匹配嵌套Html標簽

2020-01-20 22:18:08
字體:
來源:轉載
供稿:網友
通用 HTML 標簽區配正則

最近看網站日志,發現有人在博客上轉了我不知道幾年前寫的一個匹配 HTML 標簽的正則,剛好最近也在做一些相關的事情,頓時來了興趣。就拿回來改改,成了下面這樣,可能會有一些 case 遺漏,歡迎修改,已知在內嵌 <script> 復雜內容的處理能力較弱,不過對純 HTML 來說已經夠用,拿來做一些分析工具還是不錯滴。
復制代碼 代碼如下:

<script type="text/javascript">
var str = "<br /><br/><br><br ><中文><div><div id=a>無憂腳本<img src=/"http://bbs.51js.com/images/default/logo.gif/" width=/"191/" height='75' border=0 onload=/"if(testver>0 && testver<500)alert('test');/" /n onerror='alert(/"test/")' /><img src=xxx alt=/"hello/njust a test!/"></div><hr ><script type=/"test/javascript/" defer>alert(/"just a test!/");<//script>Hello.<input type=text value=/"無憂腳本/"><br / ><img /"/" ></ ><!-- 注釋 -->< ucren><!-- 再<注>釋 --><img alt=' title='/"' /><b>123</b>1<2<3,3<4>1<b><img src=/"http://bbs.51js.com/images/old51js/logo.gif/" /><!-- 三注釋>>> -->";
var reg = /<(?:(?://?[A-Za-z]/w*/b(?:[=/s](['"]?)[/s/S]*?/1)*)|(?:!--[/s/S]*?--))//?>/g;
alert(str.match(reg).join("/n----------------------------------------------------/n"));
</script>



[Ctrl+A 全選 注:如需引入外部Js需刷新才能執行]


有朋友留言說Java直接使用的話會報錯。我后來查了一下,發現Java正則引擎支持的特性相對比較少。在1.6版本中不能使用命名組(貌似1.7的時候開始支持了),否則會報以下錯誤,更別說平衡組了。因此感覺要實現無限級的嵌套匹配不大現實。
復制代碼 代碼如下:

java.util.regex.PatternSyntaxException: Look-behind group does not have an obvious maximum length near index XX

在網上搜了好久也沒找到完美的解決方案。不過,我們可以實現有限級Html嵌套標簽匹配。思路相對于無限級來說就簡單了好多,不需要那么多高級的特性。
示例:
復制代碼 代碼如下:

<div id='container'><BR> <div style='background-color:gray;' id='footer'><BR> <a id='gotop' href='#' onclick='MGJS.goTop();return false;'>Top</a><BR> <a id='powered' >WordPress</a><BR> <div id='copyright'><BR> Copyright © 2009 簡單生活 ―― Kevin Yang的博客<BR> </div><BR> <div id='themeinfo'><BR> Theme by <a >mg12</a>. Valid <a >XHTML 1.1</a><BR> and <a >CSS 3</a>.<BR> </div><BR> </div><BR></div>

在上面這個示例中,我們打算匹配id為footer的這個嵌套div,而且假設我們預先知道footer這個div里面最多只會嵌套一級div。更多級的情況我們一會兒再講。
footer的開始和結束標簽匹配很簡單:
復制代碼 代碼如下:

<div [^>]*id='footer'[^>]*>......(這里的省略號是一會要填寫的)</div>


夾在開始和結束標簽之間的內容無非有兩種情況:
內容A: div標簽,并且此div內無嵌套div
內容B: 任意其他內容
然后就是這兩種內容的不斷重復而已。正則表示如下:
復制代碼 代碼如下:

(<div[^>]*>.*?</div>|.)*?

注意最后面的問號必須要加上,否則由于正則的貪婪匹配特性,footer的閉合標簽會匹配失誤。
OK了,匹配最多嵌套一級div的正則表達式如下:
復制代碼 代碼如下:

<div [^>]*id='footer'[^>]*>(<div[^>]*>.*?</div>|.)*?</div>

那么如果footer標簽里頭最多會嵌套兩級div的話怎么辦呢?
其實也不難,我們只需要把上面的“內容A”部分中的點號稍作替換即可。修改如下:
復制代碼 代碼如下:

<div [^>]*id='footer'[^>]*>(<div[^>]*>(<div[^>]*>.*?</div>|.)*?</div>|.)*?</div>

到這里你可能就知道,如果要匹配最多嵌套三級div的話,正則應該怎么寫了:
復制代碼 代碼如下:

<div [^>]*id='footer'[^>]*>(<div[^>]*>(<div[^>]*>(<div[^>]*>.*?</div>|.)*?</div>|.)*?</div>|.)*?</div>

所以實際上,只要你的html結構不是特別復雜的話,也就是說嵌套不會很深的話,那么你完全可以使用這種方式來匹配嵌套html標簽。
這個正則在Java和Javascript中都可以使用,因為它沒有用到任何高級特性。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品日韩专区| 国产精品69久久久久| 日韩精品免费在线视频观看| 亚洲无限乱码一二三四麻| 不卡在线观看电视剧完整版| 欧美体内谢she精2性欧美| 日韩欧美国产中文字幕| 色小说视频一区| 日韩精品视频观看| 亚洲国内精品在线| 亚洲一二在线观看| 日韩免费在线看| 国产精品久久久久久久久免费看| 在线播放日韩欧美| 韩国v欧美v日本v亚洲| 亚洲黄一区二区| 日本不卡高字幕在线2019| 最近2019免费中文字幕视频三| 亚洲激情在线观看视频免费| 成人网中文字幕| 国产精品第一页在线| 久久久久久亚洲精品中文字幕| 69久久夜色精品国产7777| 国内精品免费午夜毛片| 91理论片午午论夜理片久久| 一本色道久久88综合日韩精品| 57pao国产精品一区| 色综合久久精品亚洲国产| 一区二区三区久久精品| 国产成人自拍视频在线观看| 正在播放亚洲1区| 亚洲视屏在线播放| 欧美老妇交乱视频| 国产精品a久久久久久| 欧洲永久精品大片ww免费漫画| 国产精品久久久久不卡| 96sao精品视频在线观看| 欧美性资源免费| 97国产suv精品一区二区62| 亚洲精品美女久久| 中文字幕国产日韩| 国产成人一区二| 中文字幕欧美视频在线| 国产精品久久97| 成人免费在线视频网址| 久久久精品欧美| 亚洲精品国产精品国自产观看浪潮| 亚洲精品欧美一区二区三区| 亚洲欧美成人精品| 黄色一区二区在线观看| 欧美电影免费观看大全| 欧美极品xxxx| 66m—66摸成人免费视频| 韩日精品中文字幕| 国产成一区二区| 日韩欧美成人网| 国产精品免费小视频| 国产乱肥老妇国产一区二| 精品国产91乱高清在线观看| 亚洲午夜性刺激影院| 国产精品久久久久久亚洲调教| 成人久久18免费网站图片| 日本亚洲欧美三级| 国产精品久久久久久久av电影| 国产精品成人va在线观看| 久久国产天堂福利天堂| 欧美午夜www高清视频| 九九热这里只有精品6| 97香蕉超级碰碰久久免费的优势| 黑人极品videos精品欧美裸| 91老司机精品视频| 91av国产在线| 日韩中文字幕视频在线观看| 97久久精品视频| 久久精品国产亚洲一区二区| 4388成人网| 91久久久久久久久久久久久| 欧美视频在线观看免费| 国内精品久久久久久中文字幕| 亚洲女成人图区| 国产mv免费观看入口亚洲| 国产精品偷伦一区二区| 午夜精品国产精品大乳美女| 97人人做人人爱| 国产精品都在这里| 国产精品网址在线| 日韩欧美视频一区二区三区| 久久偷看各类女兵18女厕嘘嘘| 国产精品黄色av| 亚洲欧美日韩第一区| 91精品国产高清| 日韩一区视频在线| 亚洲香蕉在线观看| 国产ts人妖一区二区三区| 久久久久久久激情视频| 日韩在线观看成人| 欧美片一区二区三区| 亚洲国产精品大全| 欧美日韩xxx| 久久精品国产久精国产一老狼| 国产精品久久久久久搜索| 国产精品美女在线观看| 日本亚洲欧美成人| 国产91在线高潮白浆在线观看| 精品久久久久人成| 国内精品中文字幕| 91av在线影院| 亚洲自拍另类欧美丝袜| 亚洲国产成人一区| 亚洲精品电影网| 成人激情视频网| 国产在线a不卡| 91精品国产自产91精品| 国产综合在线观看视频| 在线播放精品一区二区三区| 理论片在线不卡免费观看| 国产精品成人观看视频国产奇米| 97精品视频在线| 国产成+人+综合+亚洲欧洲| 国产精品大片wwwwww| 亚洲永久在线观看| 成人精品视频在线| 亚洲色图25p| 97视频国产在线| 视频在线观看一区二区| 亚洲国产欧美久久| 国产精品久久久久国产a级| 成人免费观看49www在线观看| 亚洲japanese制服美女| 亚洲国产成人久久综合一区| 最新国产成人av网站网址麻豆| 91视频8mav| 亚洲国产日韩欧美在线动漫| 亚洲欧美日韩一区二区三区在线| 色综合91久久精品中文字幕| 国产视频观看一区| 中文字幕亚洲在线| 亚洲精品久久久久久久久久久久| 久久成人一区二区| 欧美午夜精品在线| 成人有码视频在线播放| 日韩在线中文视频| 欧美三级欧美成人高清www| 91久久精品国产91久久性色| 欧美另类在线观看| 久久人91精品久久久久久不卡| 亚洲新声在线观看| 成人深夜直播免费观看| 日韩经典一区二区三区| 亚洲女成人图区| 国产精品欧美日韩久久| 91av免费观看91av精品在线| 国产精品999999| 亚洲欧洲国产精品| 蜜臀久久99精品久久久无需会员| 欧美另类69精品久久久久9999| 精品偷拍一区二区三区在线看| 亚洲自拍偷拍福利| 亚洲爱爱爱爱爱| 欧美视频裸体精品| 热门国产精品亚洲第一区在线| 精品美女久久久久久免费| 国产精品丝袜久久久久久高清| 欧美wwwwww|