Почему это регулярное выражение не соответствует этому цвету в Java? - PullRequest
0 голосов
/ 31 октября 2019

Обычно найденное регулярное выражение для шестнадцатеричного цветового кода соответствует цвету # 79bff7 , но это не удается внутри моей Java-программы.

Использованный мной валидатор цвета - это просто копияиз HexValidator .

public class HexValidator{

   private Pattern pattern;
   private Matcher matcher;

   private static final String HEX_PATTERN = "^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$";

   public HexValidator(){
      pattern = Pattern.compile(HEX_PATTERN);
   }

   /**
   * Validate hex with regular expression
   * @param hex hex for validation
   * @return true valid hex, false invalid hex
   */
   public boolean validate(final String hex){

      matcher = pattern.matcher(hex);
      return matcher.matches();

   }
}

Я хотел бы видеть это конкретное сопоставление цветов, как это происходит на онлайн-сопоставлениях регулярных выражений, таких как regex101 .

Ответы [ 3 ]

0 голосов
/ 01 ноября 2019

Если у вас есть пробелы / непечатаемые символы вне цветного текста, вы можете использовать это регулярное выражение и Matcher.find вместо этого:

private static final String HEX_PATTERN =
    "(?i)#([a-f0-9]{6}|[a-f0-9]{3})(?![a-f0-9])";

public boolean validate(final String hex) {
    matcher = pattern.matcher(hex);
    return matcher.find();
}

Это регулярное выражение также можно использовать, если вы хотите сканировать несколькоцвета в строке.

0 голосов
/ 01 ноября 2019

В коде цвета действительно были пробелы. Спасибо вам, ребята! Прошу прощения за недостаток внимания!

0 голосов
/ 01 ноября 2019

Распечатать сообщение, если оно не совпадает. Включите кавычки, чтобы увидеть, есть ли пробелы.

public boolean validate(final String hex){
   matcher = pattern.matcher(hex);
   boolean matches = matcher.matches();
   if (!matches)
       System.out.println ("not a hex color string: \"" + hex + "\" length: " + hex.length());
   return matches;
}
...