HTML文本中移除所有HTML标记并提取纯文本是我们经常需要使用的文本内容处理方式,比如搜索引擎、网站爬虫或者本地文档检索系统需要提取网页或HTML文档的实际内容进行索引。通过去除HTML标签,可以专注于实际的文字信息,提高搜索结果的相关性和准确性。在新闻聚合应用或社交媒体平台上展示网页链接的摘要时,通常会提取并显示纯文本内容以提供简洁的预览。对于视觉障碍人士使用的辅助技术如屏幕阅读器,它们无法解析复杂的HTML结构,因此需要提取纯文本以便朗读给用户。所以今天给大家分享一个使用正则表达式移除所有的Html标记的方法,供有需要的朋友们参考:
第一个核心代码是:正则表达式"<.*?>"
// 示例用法:
string inputHtml="<html><body><h1>Hello, World!</h1>This is a <b>test</b>.</body></html>";
string plainText=RemoveHtmlTags(inputHtml);
Console.WriteLine(plainText); // 输出: "Hello, World!This is a test."
public static string RemoveHtmlTags(string html)
{
// 正则表达式用于匹配HTML标签
Regex regex=new Regex("<.*?>", RegexOptions.Singleline | RegexOptions.Compiled);
// 使用正则表达式的Replace方法移除所有匹配的HTML标签
string result=regex.Replace(html, String.Empty);
return result;
}
这个正则表达式<.*?>是非贪婪匹配任何以 < 开始、以 > 结束的字符串,它会尽可能少地匹配字符以找到每个HTML标签。
请注意,虽然此方法对于简单场景可能有效,但对复杂的HTML文档(特别是含有嵌套标签、注释、CDATA等内容)可能不够健壮,因为它无法处理所有可能的HTML结构。
第二个核心代码是:正则表达式"<[^>]*>"
public static string ExtractPlainTextFromHtml(string html)
{
// 使用正则表达式匹配所有的HTML标签
// 注意:这个简单的正则表达式适用于大多数基础HTML结构,但可能无法处理复杂嵌套或特殊格式的HTML
Regex regex=new Regex("<[^>]*>", RegexOptions.Singleline | RegexOptions.Compiled);
// 使用Replace方法去除所有匹配到的HTML标签,并返回纯文本内容
string plainText=regex.Replace(html, String.Empty);
return plainText.Trim(); // 为了得到更整洁的结果,可以对结果进行trim操作以去除多余的空白字符
}
在这段代码中,我们定义了一个名为ExtractPlainTextFromHtml的方法,该方法利用正则表达式 <[^>]*> 来查找并替换所有HTML标签。这里的正则表达式表示任何以 < 开始、以 > 结束的非空字符串(即HTML标签),Singleline 选项使.能匹配换行符,以便跨多行搜索标签,而 Compiled 选项则是为了优化正则表达式的性能。
第二个核心代码是:正则表达式"<[^>]*>"
public static string RemoveHtmlTags(string html)
{
// 正则表达式,匹配所有HTML标签
string pattern="<[^>]+>";
// 使用Regex.Replace方法移除所有匹配的HTML标签
return Regex.Replace(html, pattern, String.Empty);
}
请注意,此方法仅移除HTML标记,不会解析或处理嵌入在HTML中的JavaScript代码或其他非标记内容。此外,此方法也无法处理不规范或不符合预期格式的HTML标记。如果需要更复杂的HTML解析或清理,您可能需要使用专门的HTML解析库,如AngleSharp或HtmlAgilityPack等。
尽管上述方法对于许多简单场景已经足够有效,但在面对复杂的HTML文档时,由于HTML本身的嵌套和特殊结构,简单的正则表达式可能无法完美地解析并移除所有标签。在这种情况下,推荐使用专门为处理HTML设计的库,如HtmlAgilityPack,它可以准确地解析HTML并提供丰富的API用于提取纯文本内容。
HP默认的函数有移除指定html标签,名称为strip_tags,在某些场合非常有用。
strip_tags
(PHP 3 >=3.0.8, PHP 4, PHP 5)
strip_tags — Strip HTML and PHP tags from a string
string strip_tags ( string str [, string allowable_tags] )
弊端 :
这个函数只能保留想要的html标签,就是参数string allowable_tags。
这个函数的参数allowable_tags的其他的用法。
strip_tags($source, ”); 去掉所以的html标签。
strip_tags($source, ‘<div><img><em>’); 保留字符串中的div、img、em标签。
如果想去掉的html的指定标签。那么这个函数就不能满足需求了。于是乎我用到了这个函数。
/**
* Removes specific tags.
*/
function strip_only_tags($str, $tags, $stripContent=FALSE) {
$content='';
if (!is_array($tags)) {
$tags=(strpos($str, '>') !==false ? explode('>', str_replace('<', '', $tags)) : array($tags));
if (end($tags)=='') {
array_pop($tags);
}
}
foreach($tags as $tag) {
if ($stripContent) {
$content='(.+<!--'.$tag.'(-->|\s[^>]*>)|)';
}
$str=preg_replace('#<!--?'.$tag.'(-->|\s[^>]*>)'.$content.'#is', '', $str);
}
return $str;
}
参数说明
$str — 是指需要过滤的一段字符串,比如div、p、em、img等html标签。
$tags — 是指想要移除指定的html标签,比如a、img、p等。
$stripContent=FALSE — 移除标签内的内容,比如将整个链接删除等,默认为False,即不删除标签内的内容。
使用说明
$target=strip_only_tags($source, array(‘a’,'em’,'b’));
移除$source字符串内的a、em、b标签。
$source='<div><a href="http://www.tsingyaun.cn" target="_blank"><img src="http://www.tsingyuan.cn/logo.png" border="0" alt="Welcome to linzl." />This a example from<em>lixiphp</em></a><strong>!</strong></div>
';
$target=strip_only_tags($source, array('a','em'));
//target results
//<div><img src="http://blog.lixiphp.com/logo.png" border="0" alt="Welcome to lixiphp." />This a example from<strong>!</strong></div>
:left;"
hp修改html标签中的内容php与html如何配合使用php改变htmlphp过滤htmlphp输出html标签
PHP删除HTMl标签的三种解决方法_流年-CSDN博客_php去除htm...
2017年9月19日 在PHP中可以使用strip_tags函数去除HTML标签,看下面示例: 复制代码代码如下: <?php $str=‘www<p>dreamdu</p>.com'; echo(htmlspecialchars($str).”<br>”);...
CSDN技术社区
百度快照
php去除HTML标签实例_php实例_脚本之家
2013年11月6日 在php中要去除字符串中的HTML标签方法有很多种,最常用的就是使用strip_tags函数一并去了,只保留字符了,还在就是有选择性的去除了这里要用正则表达式了,下面写二...
*请认真填写需求信息,我们会在24小时内与您取得联系。