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

时间:2012-05-27 13:28:00

标签: java regex ip automata jflap

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

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

Automata 中使用的正则表达式略有不同(如果我没记错的话)

顺便说一下,我想设计一个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。

我该怎么办?

1 个答案:

答案 0 :(得分:1)

你不需要直接转换正则表达式,一旦你理解它正在尝试做什么就可以重写它。

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

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

那就是说,你发布的正则表达式中没有任何非标准。它就像它们来的一样简单,我不知道它为什么不适合你。