Ma réponse fournit une version plus robuste de @ Floyd et, dans la mesure du possible, les adresses @ Vous de cas de test de rupture, où un lookahead négatif est utilisé pour l'éviter. Il y a vraiment un seul cas auquel je peux penser (une variante de l'exemple de @ You) où il donnera un faux positif, mais je pense que ce serait plutôt rare. Les expressions doivent être exécutées avec le drapeau insensible à la casse et ont été testées en utilisant java.util.regex et JRegex.
Les groupes de capture sont automatiquement rognés et n'incluent jamais de guillemets, ni d'autres caractères comme "/" ou ">". Dans la deuxième expression, il y a deux groupes de capture; la première étant la valeur de type content, qui peut être vide (ie, en utilisant charset attribtue), et la seconde étant la valeur charset, qui sera toujours non vide (sauf si la valeur charset est littéralement laissée vide pour une raison étrange)).
regex pour/regroupement valeur charset uniquement - parés, Sauts citations
<meta(?!\s*(?:name|value)\s*=)[^>]*?charset\s*=[\s"']*([^\s"'/>]*)
comme ci-dessus, mais correspond aussi/groupes type de contenu (en option) et charset (requis) valeurs, parées, saute citations . mise en garde mineure - Misses correspondant à la valeur de type de contenu autonome, à savoir, "text/html"
<meta(?!\s*(?:name|value)\s*=)(?:[^>]*?content\s*=[\s"']*)?([^>]*?)[\s"';]*charset\s*=[\s"']*([^\s"'/>]*)
des cas de test (tous sauf passe le tout dernier) ...
<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">
Quelle langue utilisez-vous? Ils ont tous des différences subtiles (et pas si subtiles) dans leurs dialectes RegEx. – Oded
'Certaines personnes, lorsqu'elles sont confrontées à un problème, pensent" je sais, j'utiliserai des expressions régulières ". Maintenant, ils ont deux problèmes. »~ Jamie Zawinski –
si votre exemple html est l'intégralité de la chaîne que vous avez à analyser, alors regex est ok, mais si votre chaîne est un document html entier, la réponse« You's »s'applique. – Benjol