java - 适用于 JFLAP 的 IP 验证正则表达式

标签 java regex ip automata

我注意到我们程序员在程序中使用正则表达式来完成诸如

之类的任务
  • 电子邮件地址验证
  • IP 验证
  • ...

自动机中使用的正则表达式有点不同(如果我没记错的话)

顺便说一句,我想设计一个 NFA 并最终设计一个用于 IP 验证的 DFA。 我发现了很多正则表达式,例如下面的:

\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

但我无法使用 JFLAP 将其转换为 NFA 或 DFA。

我应该做什么?

最佳答案

您不需要直接转换正则表达式,一旦您了解它要做什么,就可以重写它。

有效的 IPv4 地址是由小数点分隔的 4 个数字。每个数字可以从 0 到 255。正则表达式不能很好地处理范围,所以这就是为什么它看起来像这样。您发布的正则表达式检查它是否以 2 开头,然后接下来的两个数字不能分别大于 5,如果以 1 开头,则它们可以达到 9,等等。

验证正则表达式的最简单方法是使用 . 作为分隔符将其拆分,将字符串转换为数字,并检查其范围。

也就是说,您发布的正则表达式中没有任何不标准的内容。就这么简单,我不知道为什么它不适合你。

关于java - 适用于 JFLAP 的 IP 验证正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10774322/

相关文章:

python - 为什么这两种变体之间的速度差异如此之大?

regex - 如何评估 Ansible 任务的 when 条件

多行编写的 JavaScript 正则表达式

javascript - IP 地址正则表达式简化

ip - 远程连接时隐藏您的IP

java - 使用本地PC作为服务器

java - 如何将 Hudson 的 env.EXECUTOR_NUMBER 传递给 log4j 属性和 Java 的 System.getProperty

java - Windows 7 上不会为已安装的应用程序创建 hs_err_pid 文件

java - 如何用Java屏蔽手机号码中间四位?

java - Android 通话记录查询给出非法参数异常 : column '_id' does not exist