2016-08-23 5 views
3

私は単純にすべての16進数の色の値をCSSファイルから取得しようとしています。 進値はので、ここで#FFFまたは#FFFFFF可能性があり、私はこのjavaを使用してCSSから16進数の色を抽出

  • "^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$"
  • "#([a-f0-9]{3}){1,2}/i"
  • "^#[0-9a-zA-F]{3}"

が、まったく機能していないために使用される正規表現です。

iは#969696 #CCC

#996633#333として結果を期待して....

しかし、何も、私は間違っているつもりです任意のアイデアを得ていないのですか?ここで

は、コードは次のとおりです。

final String HEX_PATTERN_STRING = "^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$"; 
Pattern pattern = Pattern.compile(HEX_PATTERN_STRING); 
try { 
     final URL CSS = new URL("https://maxcdn.bootstrapcdn.com/.../bootstrap.min.css"); 
     URLConnection data = CSS.openConnection(); 
     StringBuilder result = new StringBuilder(); 
     try (BufferedReader in = new BufferedReader(
       new InputStreamReader(
         data.getInputStream()) 
     )) { 
      in.lines().forEach(result::append); 

      Matcher matcher = pattern.matcher(result); 
      while (matcher.find()) { 
       System.out.println(matcher.group(0)); 
      } 
      System.out.println("Done"); 
     } 

    } catch (IOException ex) { 
    } 
+0

私はあなたが実際にどこでもあなたのマーチャと 'HEX_PATTERN_STRING'を関連付ける表示されません。 –

+2

'final String HEX_PATTERN_STRING ="#(?:[A-Fa-f0-9] {6} | [A-Fa-f0-9] {3}) ";'を使って 'Pattern pattern = Pattern 'を追加してみてください。 'Matcher matcher'で始まる行の前にコンパイルします(HEX_PATTERN_STRING)。 –

答えて

2

は、文字列全体の一致を必要とする、あなたのパターンは^(文字列の先頭)と$(文字列の末尾)アンカーが含まれています。

これらのアンカーを削除する必要があります。

あなたは、Javaの正規表現のように、あなたはパターンの内側、または(Pattern.UNICODE_CASEと通常、)Pattern.CASE_INSENSITIVEフラグの助けを借りて(?i)として修飾子を渡すことができ、どちらか/.../のような正規表現の区切り文字を使用することはできません。

また、数字だけが必要ない場合は、キャプチャグループを非キャプチャ(?:...)にすることができます。

使用

final String HEX_PATTERN_STRING = "#(?:[A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})"; 
+0

私の悪い私はこの行を置くことを忘れてしまった 'pattern = Pattern.compile(HEX_PATTERN_STRING);'私のコードでは私はpaaternを宣言しています。私は質問を更新しています – Mak

+0

あなたの期待した結果を示し、「うまくいかない」ということを意味することを忘れないでください。 –

+0

私はあなたが必要とするのはアンカーを取り除くことだけだと信じています。私はダブルチェックをしました.Javaによって内部的に文字列に変換されるので、 'StringBuilder'を' matcher'に渡すことができます。 –

関連する問題