我注意到程序员在我们的程序中使用正则表达式来完成诸如
之类的任务与 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。
我该怎么办?
答案 0 :(得分:1)
你不需要直接转换正则表达式,一旦你理解它正在尝试做什么就可以重写它。
有效的IPv4地址是由小数点分隔的4个数字。每个数字可以从0到255.正则表达式不能很好地进行范围,所以这就是为什么它看起来像。您发布的正则表达式检查它是否以2开头,然后接下来的两个数字不能大于5,如果它以1开头,它们最多可以达到9,等等。
验证正则表达式的最简单方法是将其分隔为.
作为分隔符,将字符串转换为数字,并检查它们的范围。
那就是说,你发布的正则表达式中没有任何非标准。它就像它们来的一样简单,我不知道它为什么不适合你。