1

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

  • 电子邮件地址验证
  • 知识产权验证
  • ...

与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。

我应该怎么办?

4

1 回答 1

1

您不需要直接转换正则表达式,您可以在了解它的目的后重写它。

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

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

也就是说,您发布的正则表达式中没有任何不标准的内容。就像他们来的一样简单,我不知道为什么它对你不起作用。

于 2012-05-27T13:36:55.263 回答