猛火网(LieHuo.Net)教程 我想获得一个div标签,这个标签有其特定的id,怎么匹配一个html中的非此div标签,然后删除,即获得这个div标签。这种方法怎么实现?
答:
团结均衡组可以实现:
均衡组/递归匹配 这里先容的均衡组语法是由.Net Framework支持的;其余说话/库不必然支持这种成果,可能支持此成果但必要行使差异的语法。
偶然我们必要匹配像( 100 * ( 50 + 15 ) )这样的可嵌套的条理性布局,这时简朴地行使(.+)则只会匹配到最左边的左括号和最右边的右括号之间的内容(这里我们接头的是贪心模式,懒惰模式也有下面的题目)。若是原本的字符串里的左括号和右括号呈现的次数不相称,好比( 5 / ( 3 + 2 ) ) ),那我们的匹配功效里两者的个数也不会相称。有没有步伐在这样的字符串里匹配到最长的,配对的括号之间的内容呢?
为了停止(和(把你的大脑彻底搞糊涂,我们照旧用尖括号取代圆括号吧。此刻我们的题目酿成了怎样把xx <aa <bbb> <bbb> aa> yy这样的字符串里,最长的配对的尖括号内的内容捕捉出来?
这里必要用到以下的语法结构:
(?'group') 把捕捉的内容定名为group,并压入仓库(Stack) (?'-group') 从仓库上弹出最后压入仓库的名为group的捕捉内容,假如仓库原来为空,则天职组的匹配失败 (?(group)yes|no) 假如仓库上存在以名为group的捕捉内容的话,继承匹配yes部门的表达式,不然继承匹配no部门 (?!) 零宽负向先行断言,因为没有后缀表达式,试图匹配老是失败 假如你不是一个措施员(可能你自称措施员可是不知道仓库是什么对象),你就这样领略上面的三种语法吧:第一个就是在黑板上写一个"group",第二个就是从黑板上擦掉一个"group",第三个就是看黑板上写的尚有没有"group",假若有就继承匹配yes部门,不然就匹配no部门。
我们必要做的是每遇到了左括号,就在压入一个"Open",每遇到一个右括号,就弹出一个,到了最后就看看仓库是否为空--假如不为空那就证明左括号比右括号多,那匹配就应该失败。正则表达式引擎会举办回溯(放弃最前面或最后头的一些字符),只管使整个表达式获得匹配。
< #最外层的左括号 [^<>]* #最外层的左括号后头的不是括号的内容 ( ( (?'Open'<) #遇到了左括号,在黑板上写一个"Open" [^<>]* #匹配左括号后头的不是括号的内容 )+ ( (?'-Open'>) #遇到了右括号,擦掉一个"Open" [^<>]* #匹配右括号后头不是括号的内容 )+ )* (?(Open)(?!)) #在碰着最外层的右括号前面,判定黑板上尚有没有没擦掉的"Open";假如尚有,则匹配失败> #最外层的右括号均衡组的一个最常见的应用就是匹配HTML,下面这个例子可以匹配嵌套的<div>标签:<div[^>]*>[^<>]*(((?'Open'<div[^>]*>)[^<>]*)+((?'-Open'</div>)[^<>]*)+)*(?(Open)(?!))</div>. (编辑:湖南网)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|