次のコードがあります。その目的は、正規表現を使用して、特定の Web ページのエンコーディング/文字セットを検出することです。
次の 2 つの正規表現 (regexHTML1
およびregexHTML2
) をテストする必要があります。この場合、正しい正規表現は 2 番目の正規表現であり、次のようregexHTML2
に出力されます。
Found: <meta id="HtmlHead1_desc" name="description" content="Televisores,TV 3D, TV, vídeo e MP3. Compre online Televisores,TV 3D na Fnac" /><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><meta
Found: UTF-8
このコードで:
URL url = new URL("http://www.fnac.pt/imagem-e-som/TV-3D/Televisores/s21075?bl=HGAChead");
is = url.openStream();
String regexHTML1 = "<meta.*content=\\\".*;.*charset=(.*)\\\"\\s*/?>";
String regexHTML2 = "<meta.*content=\\\".*;.*charset=(.*)\\\"\\s*/?>\\s*<meta";
// Scanner s = new Scanner(is);
// s.findWithinHorizon(regexHTML1, 0);
// MatchResult result = s.match();
// for (int i = 0; i <= result.groupCount(); i++)
// System.out.println("Found: " + result.group(i));
// s.close();
Scanner s2 = new Scanner(is);
s2.findWithinHorizon(regexHTML2, 0);
MatchResult result2 = s2.match();
for (int i = 0; i <= result2.groupCount(); i++)
System.out.println("Found: " + result2.group(i));
s2.close();
ただし、最初の正規表現 ( ) をテストするコメント化されたコード ブロックのコメントを外すとregexHTML1
、出力は次のようになります。
Found: <meta id="HtmlHead1_desc" name="description" content="Televisores,TV 3D, TV, vídeo e MP3. Compre online Televisores,TV 3D na Fnac" /><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><meta http-equiv="PICS-Label" content="(PICS-1.1 "http://www.rsac.org/ratingsv01.html" l gen true comment "RSACi North America Server" by "webmaster@fnac.com" for "http://www.fnac.com/" on "1997.06.30T14:21-0500" r (n 0 s 0 v 0 l 0))" /><link rel="shortcut icon" href="/favicon.ico" /><link id="HtmlHead1_canonicalLink" rel="canonical" href="http://www.fnac.pt/imagem-e-som/TV-3D/Televisores/s21075" />
Found: UTF-8" /><meta http-equiv="PICS-Label" content="(PICS-1.1 "http://www.rsac.org/ratingsv01.html" l gen true comment "RSACi North America Server" by "webmaster@fnac.com" for "http://www.fnac.com/" on "1997.06.30T14:21-0500" r (n 0 s 0 v 0 l 0))" /><link rel="shortcut icon" href="/favicon.ico" /><link id="HtmlHead1_canonicalLink" rel="canonical" href="http://www.fnac.pt/imagem-e-som/TV-3D/Televisores/s21075
のでregexHTML1
、適切ではありません。しかし、regexHTML2
(正しいもの)をテストすると、例外がスローされます。
java.lang.IllegalStateException: No match result available
これはどのように可能ですか?regexHTML2
テストしていないときにのみ機能し
ますregexHTML1
...