
由内向外循环!内是指哪一层的内!有必要哪样吗!返正最终<>都是全变到[],为什么向外循环!这样不是增加计算机内存吗!
<script>
var pattern='<html><head><title>1</title></head><body><div>top</div><div><div class="main"><div>content<br />newline </div></div></div></body></html>';
documentwrite(patternreplace(/</g,"[")replace(/>/g,"]"));
</script>
补:你可以看一下UBB代码原理!正则是解决不了这问题的,也不知你要实现什么功能!你也可以用ID来设置。如:idinnerHTML 来处理。
给你个例子,你自己看看吧。
平衡组/递归匹配
如何把xx <aa <bbb> <bbb> aa> yy这样的字符串里,最长的配对的尖括号内的内容捕获出来?
这里需要用到以下的语法构造:
('group') 把捕获的内容命名为group,并压入堆栈(Stack)
('-group') 从堆栈上d出最后压入堆栈的名为group的捕获内容,如果堆栈本来为空,则本分组的匹配失败
((group)yes|no) 如果堆栈上存在以名为group的捕获内容的话,继续匹配yes部分的表达式,否则继续匹配no部分
(!) 零宽负向先行断言,由于没有后缀表达式,试图匹配总是失败
我们需要做的是每碰到了左括号,就在压入一个"Open",每碰到一个右括号,就d出一个,到了最后就看看堆栈是否为空--如果不为空那就证明左括号比右括号多,
那匹配就应该失败。正则表达式引擎会进行回溯(放弃最前面或最后面的一些字符),尽量使整个表达式得到匹配。
平衡组一个匹配嵌套的<div>标签:
<div[^>]>[^<>]((('open'<div[^>])[^<>])+('-open'</div>)[^<>])+)((open)(!))</div>
import javautilregex;
public class RegexExample {
public static void main(String []args) {
String content=获取的网页内容;
Pattern p=Patterncompile("<div class=\"fliter_px\">([\\s\\S]+)<div class=\"search_page\">");
Matcher m=pmatcher(content);
if(mfind()){
Systemoutprintln(mgroup(1));
}
}
}
public static void main(String[] args) {String s1 = "zwerwr423111111";Pattern p = Patterncompile("([^]+)");Matcher m = pmatcher(s1);while(mfind()){Systemoutprintln(mgroup(3));}} //改了下正则,这样很强大了
正则:/<[^>]>|/g
结果:"111! !!123↵!222↵123↵ "
正则:/(<=>)(|\s) (=</\w+[^<] >)/g
结果:["111! !!123", "↵", "!222", "↵", "123", "↵", " "]
结果:[">111! !!123", ">↵", ">!222", ">↵", ">123", ">↵", "> "]
问题:都会带一个>号,map循环slice下就好了
(<=>)[^<>]+(=<)
假如html标签里面有一句:
String a = "<style type=\"text/css\"> div \n" +
"{ margin: 0; padding: 0; outline: 0; }</style>";
我如何把这一句取出来呢,包括标签。
用正则表达式:<style([\\s\\S])</style>
扩展资料:
正则表达式匹配HTML标签
方法一:
var str = '<p class="odd" id="odd">123</p>';
var pattern = /<\/[a-zA-Z]+(\s+[a-zA-Z]+="")>/g;
consolelog(strmatch(pattern));
方法二:
var str = '<p class="odd" id="odd">123</p>';
var pattern = /<[^>]+>/g;
consolelog(strmatch(pattern));
方法三:
var str = '<input type="text" value=">" name="username" />';
var pattern = /<(:[^"'>]|"[^"]"|'[^']')>/g;
consolelog(strmatch(pattern));
说明:()表示捕获分组,()会把每个分组里的匹配的值保存起来,使用$n(n是一个数字,表示第n个捕获组的内容)
(:)表示非捕获分组,和捕获分组唯一的区别在于,非捕获分组匹配的值不会保存起来
没有引用的需求的话,采用非捕获性分组,更为简洁;
方法四:
var str = '<input type="text" value=">" name="username" />';
var pattern = /<(:[^"'>]|(["'])[^"']\1)>/g;
consolelog(strmatch(pattern));
</script>
header('content-type:text/html; charset=utf-8');
$str = '<li><a href="/news1397/" title="1827年3月5日 意大利物理学家伏打逝世">1827年3月5日 意大利物理学家伏打逝世</a> </li>
<li><a href="/news1398/" title="1871年3月5日 波兰女革命家卢森堡诞辰">1871年3月5日 波兰女革命家卢森堡诞辰</a> </li>
<li><a href="/news1399/" title="1886年3月5日 董必武诞辰">1886年3月5日 董必武诞辰</a> (图)</li> ';
preg_match_all('/<a>()<\/a>/im', $str, $matches);
var_dump($matches[1]);
以上就是关于正则表达式循环提取嵌套的每对html标签全部的内容,包括:正则表达式循环提取嵌套的每对html标签、如何用js和C#的正则表达式获取具备指定属性的任意html标签、java正则表达式获取任意两个html标签中的内容等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)