HTML 代码示例:
<meta http-equiv="Content-type" content="text/html;charset=utf-8" />
我想使用 RegEx 提取字符集信息(即这里是“utf-8”)
(我使用的是C#)
我的答案提供了 @Floyd 的更强大的版本,并在可能的程度上解决了 @You 的破损测试用例,其中使用负前瞻来避免它。我实际上只能想到一个相关的案例(@You 的示例的一种变体),它会给出误报,但我认为这种情况非常罕见。表达式预计使用不区分大小写的标志运行,并使用java.util.regex http://docs.oracle.com/javase/7/docs/api/java/util/regex/package-summary.html and JRegex http://jregex.sourceforge.net/.
捕获组会自动修剪,并且从不包含引号,也不包含其他标记字符(例如“/”或“>”)。在第二个表达式中,有 2 个捕获组;第一个是内容类型值,它可能为空(即,当使用字符集属性时),第二个是字符集值,它始终为非空(除非字符集值由于某种奇怪的原因实际上留空) )。
仅用于匹配/分组字符集值的正则表达式 - 修剪,跳过引号
<meta(?!\s*(?:name|value)\s*=)[^>]*?charset\s*=[\s"']*([^\s"'/>]*)
与上面相同,但还匹配/分组内容类型(可选)和字符集(必需)值,修剪,跳过引号。小警告 - 错过匹配独立内容类型值,即“text/html”
<meta(?!\s*(?:name|value)\s*=)(?:[^>]*?content\s*=[\s"']*)?([^>]*?)[\s"';]*charset\s*=[\s"']*([^\s"'/>]*)
测试用例(除了最后一个之外都通过了)...
<meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
<meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1" />
<meta http-equiv='Content-Type' content='text/html;charset=iso-8859-1'/>
<meta http-equiv='Content-Type' content='text/html;charset=iso-8859-1' />
<meta http-equiv=Content-Type content=text/html;charset=iso-8859-1/>
<meta http-equiv=Content-Type content=text/html;charset=iso-8859-1 />
<meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
<meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1" >
<meta http-equiv='Content-Type' content='text/html;charset=iso-8859-1'>
<meta http-equiv='Content-Type' content='text/html;charset=iso-8859-1' >
<meta http-equiv=Content-Type content=text/html;charset=iso-8859-1>
<meta http-equiv=Content-Type content=text/html;charset=iso-8859-1 >
<meta http-equiv="Content-Type" content="text/html;charset='iso-8859-1'">
<meta http-equiv="Content-Type" content="'text/html;charset=iso-8859-1'">
<meta http-equiv="Content-Type" content="'text/html';charset='iso-8859-1'">
<meta http-equiv='Content-Type' content='text/html;charset="iso-8859-1"'>
<meta http-equiv='Content-Type' content='"text/html;charset=iso-8859-1"'>
<meta http-equiv='Content-Type' content='"text/html";charset="iso-8859-1"'>
<meta http-equiv="Content-Type" content="text/html;;;charset=iso-8859-1">
<meta http-equiv="Content-Type" content="text/html;;;charset='iso-8859-1'">
<meta http-equiv="Content-Type" content="'text/html;;;charset=iso-8859-1'">
<meta http-equiv="Content-Type" content="'text/html';;;charset='iso-8859-1'">
<meta http-equiv='Content-Type' content='text/html;;;charset=iso-8859-1'>
<meta http-equiv='Content-Type' content='text/html;;;charset="iso-8859-1"'>
<meta http-equiv='Content-Type' content='"text/html;;;charset=iso-8859-1"'>
<meta http-equiv='Content-Type' content='"text/html";;;charset="iso-8859-1"'>
<meta http-equiv = " Content-Type " content = " ' text/html ' ; ;; ' ; ' ' ; ' ; ' ;; ; charset = ' iso-8859-1 ' " >
<meta content = " ' text/html ' ; ;; ' ; ' ' ; ' ; ' ;; ; charset = ' iso-8859-1 ' " http-equiv = " Content-Type " >
<meta http-equiv = Content-Type content = text/html;charset=iso-8859-1 >
<meta content = text/html;charset=iso-8859-1 http-equiv = Content-Type >
<meta http-equiv = Content-Type content = text/html ; charset = iso-8859-1 >
<meta content = text/html ; charset = iso-8859-1 http-equiv = Content-Type >
<meta http-equiv = Content-Type content = text/html ;;; charset = iso-8859-1 >
<meta content = text/html ;;; charset = iso-8859-1 http-equiv = Content-Type >
<meta http-equiv = Content-Type content = text/html ; ; ; charset = iso-8859-1 >
<meta content = text/html ; ; ; charset = iso-8859-1 http-equiv = Content-Type >
<meta charset="utf-8"/>
<meta charset="utf-8" />
<meta charset='utf-8'/>
<meta charset='utf-8' />
<meta charset=utf-8/>
<meta charset=utf-8 />
<meta charset="utf-8">
<meta charset="utf-8" >
<meta charset='utf-8'>
<meta charset='utf-8' >
<meta charset=utf-8>
<meta charset=utf-8 >
<meta charset = " utf-8 " >
<meta charset = ' utf-8 ' >
<meta charset = " utf-8 ' >
<meta charset = ' utf-8 " >
<meta charset = " utf-8 >
<meta charset = ' utf-8 >
<meta charset = utf-8 ' >
<meta charset = utf-8 " >
<meta charset = utf-8 >
<meta charset = utf-8 />
<meta name="title" value="charset=utf-8 — is it really useful (yep)?">
<meta value="charset=utf-8 — is it really useful (yep)?" name="title">
<meta name="title" content="charset=utf-8 — is it really useful (yep)?">
<meta name="charset=utf-8" content="charset=utf-8 — is it really useful (yep)?">
<meta content="charset=utf-8 — is it really useful (nope, not here, but gotta admit pretty robust otherwise)?" name="title">
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)