正则表达式匹配HTML标签之间的内容

html-css09

正则表达式匹配HTML标签之间的内容,第1张

(?<=>)[^<>]+(?=<)

假如html标签里面有一句:

String a = "<style type=\"text/css\">div \n" +

"{ margin: 0padding: 0outline: 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

console.log(str.match(pattern))

方法二:

var str = '<p class="odd" id="odd">123</p>'

var pattern = /<[^>]+>/g

console.log(str.match(pattern))

方法三:

var str = '<input type="text" value=">" name="username" />'

var pattern = /<(?:[^"'>]|"[^"]*"|'[^']*')*>/g

console.log(str.match(pattern))

说明:()表示捕获分组,()会把每个分组里的匹配的值保存起来,使用$n(n是一个数字,表示第n个捕获组的内容)

(?:)表示非捕获分组,和捕获分组唯一的区别在于,非捕获分组匹配的值不会保存起来

没有引用的需求的话,采用非捕获性分组,更为简洁;

方法四:

var str = '<input type="text" value=">" name="username" />'

var pattern = /<(?:[^"'>]|(["'])[^"']*\1)*>/g

console.log(str.match(pattern))

</script>

static void Main(string[] args)

{

String s = @"<Body>

<div>这里是要取出的文本A <img src=""/>这里是要取出的文本B <a href="">超链接里的文本不取出 </a>这里是要取出的文本C </div>

<body>"

Regex regex = new Regex( "(/?\\w+)[^>]*>([^<]*)<", RegexOptions.IgnoreCase )

MatchCollection ms = regex.Matches( s )

foreach( Match m in ms )

{

string tagName = m.Groups[1].Value.ToLower()

string text = m.Groups[2].Value.Trim()

if( tagName != "a" &&text.Length >0 )

Console.WriteLine( text )

}

}

结果:

这里是要取出的文本A

这里是要取出的文本B

这里是要取出的文本C

最简单是借用c的正则表达式库,需要引入头文件<regex.h>。支持POSIX.2正则表达式标准。简单用法如:

regex_t reg//先声明一个正则表达式体。

regcomp(®, "[a-zA-Z]*", 0)//从字符串来编译这个表达式。

regmatch_t match[2]//用来保存匹配结果。

regexec(®, "abcedfg", 2, match, 0)//匹配字符串。

以上函数的用法可以参考GNU的文档。http://www.gnu.org/s/libc/manual/html_node/Regular-Expressions.html

此外,c++中也有自己的正则表达式库,比如boost::regex。需要先安装boost库才能使用。