Meine Antwort liefert eine robustere Version von @ Floyd und dem Grad möglich, Adressen @ Sie die Bruchtestfall, wo Ein negativer Lookahead wird verwendet, um dies zu vermeiden. Es gibt wirklich nur einen relevanten Fall, den ich mir vorstellen kann (eine Variante von @ You's Beispiel), wo es ein falsches positives gibt, aber ich denke, es wäre ziemlich selten. Es wird erwartet, dass Ausdrücke mit dem Flag "case-insensitive" ausgeführt werden und mit java.util.regex und JRegex getestet wurden.
Capture-Gruppen werden automatisch abgeschnitten und enthalten keine Anführungszeichen oder andere Tag-Zeichen wie "/" oder ">". Im zweiten Ausdruck gibt es 2 Capture-Gruppen; der erste ist der Wert vom Inhaltstyp, der leer sein kann (dh wenn charset attribute verwendet wird), und der zweite ist der Zeichensatzwert, der immer nicht leer sein wird (es sei denn, der Zeichensatzwert wird aus irgendeinem Grund buchstäblich leer gelassen)).
Regex für den Abgleich/Gruppierung charset Wert - nur getrimmt, überspringt Zitate
<meta(?!\s*(?:name|value)\s*=)[^>]*?charset\s*=[\s"']*([^\s"'/>]*)
Wie oben, aber auch Spiele/Gruppen-Content-Type (optional) und charset (erforderlich) Werte, getrimmt, überspringt Anführungszeichen . Minor Nachteil - Misses eigenständigen Inhaltstyp Wert übereinstimmt, das heißt "text/html"
<meta(?!\s*(?:name|value)\s*=)(?:[^>]*?content\s*=[\s"']*)?([^>]*?)[\s"';]*charset\s*=[\s"']*([^\s"'/>]*)
Testfälle (Allpaß mit Ausnahme der allerletzten) ...
<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">
Welche Sprache verwenden Sie? Sie alle haben feine (und nicht so subtile) Unterschiede in ihren RegEx-Dialekten. – Oded
'Einige Leute denken, wenn sie mit einem Problem konfrontiert werden:" Ich weiß, ich werde reguläre Ausdrücke verwenden. " Jetzt haben sie zwei Probleme. ~ Jamie Zawinski –
Wenn Ihr Beispiel HTML die Gesamtheit der Zeichenfolge ist, die Sie analysieren müssen, dann ist Regex in Ordnung, aber wenn Ihre Zeichenfolge ein ganzes HTML-Dokument ist, gilt "Sie ist" Antwort. – Benjol