Регулярное выражение для проверки IP, которое работает в JFLAP

Я заметил, что регулярные выражения, которые мы, программисты, используем в наших программах для таких задач, как

  • проверка адреса электронной почты
  • Проверка IP
  • ...

немного отличаются от тех регулярных выражений, которые используются в автоматах (если я не ошибаюсь)

Кстати, я хочу разработать NFA и в конечном итоге DFA для проверки IP. Я нашел много регулярных выражений, таких как следующее:

\b(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b

Но я не могу преобразовать его в NFA или DFA, используя JFLAP.

Что я должен делать?

1 ответ

Вам не нужно напрямую преобразовывать регулярное выражение, вы можете переписать его, как только поймете, что он пытается сделать.

Действительный адрес IPv4 - это 4 числа, разделенные десятичными точками. Каждое число может быть от 0 до 255. Regex не очень хорошо разбирается в диапазоне, поэтому выглядит так. Регулярное выражение, которое вы разместили, проверяет, начинается ли оно с 2, затем следующие два числа не могут быть больше 5, если оно начинается с 1, они могут доходить до 9 и т. Д.

Самый простой способ проверить регулярное выражение - это разделить его с помощью . в качестве разделителя преобразуйте строки в числа и проверьте их диапазон.

Тем не менее, в этом регулярном выражении нет ничего нестандартного. Это так просто, как они приходят, я не знаю, почему это не работает для вас.

Другие вопросы по тегам