Как проверить двоичные дроби с помощью регулярных выражений? - PullRequest
0 голосов
/ 23 октября 2019

В настоящее время я использую регулярное выражение [^0-1], чтобы ограничить входные данные binaryValue только 1 и 0, используя find () в классе Matcher.

String binaryValue = "10", strRegex = "[^0-1]";
Pattern p = Pattern.compile(strRegex);
Matcher m = p.matcher(binaryValue);
if(m.find()){
    System.out.println("invalid");
}else{
    System.out.println("valid");
}

То, что я хочу сделать в моем коде:если двоичное значение содержит только комбинации 0 и 1 и необязательную одну точку (десятичную точку), выведите «valid»

Допустимые примеры форматов: 1001, 10.01, .1001, 1001.0

Ответы [ 2 ]

3 голосов
/ 23 октября 2019

Чтобы соответствовать следующим двоичным десятичным форматам 1001, 10.01, .1001, 1001.0, вы можете использовать следующее:

См. Здесь регулярное выражение

^(?:[01]+|[01]*\.[01]+)$

Как это работает:

  • ^ Устанавливает позицию в начале строки
  • (?:[01]+|[01]*\.[01]+) Соответствует любой из следующих опций
    • Вариант 1: [01]+ Соответствует любой двоичной цифре (0 или 1) один или несколько раз
    • Вариант 2: [01]*\.[01]+ Соответствует любой двоичной цифре (0 или 1) ноль или более раз, после чего следуетбуквенный символ точки ., затем на одну или несколько двоичных цифр (0 или 1) один или несколько раз.
  • $ Устанавливает позицию в конце строки

Обратите внимание, что вам необходимо избегать обратной косой черты в Java ^(?:[01]+|[01]*\\.[01]+)$.

Также обратите внимание, что это не будет соответствовать 0. (или аналогичным 1., 11.,и т.д.), поскольку этот случай явно не включен в вопрос. Чтобы соответствовать этому случаю, вы можете использовать (?:[01]+\.?|[01]*\.[01]+). Эти два шаблона регулярных выражений не позволяют сопоставлять строку ..

Примечание: слишком часто пользователи публикуют вопросы без достаточной информации и никогда не обновляют свои вопросы. Спасибо за чтение наших комментариев и внесение изменений в ваш вопрос! Вы помогаете улучшить это сообщество.

1 голос
/ 23 октября 2019

^ [01] + (. [01] +)? $


Как и ctwheels предложили . Я объясняю, что делает это регулярное выражение:

  • ^ Утверждает начало строки.
  • [01] + Как минимум один 0 илиДолжно появиться 1.
  • (. [01] +) Затем может появиться одна точка, за которой следует хотя бы одна 0 или 1 . Это также считается первой группой захвата, как указано в этих скобках.
  • ? Предыдущий элемент должен появляться ноль или один раз. Это предотвращает совпадения с более чем 1 точкой.
  • $ Утверждает конец строки.

Вы можете проверить это здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...