我注意到我们程序员在程序中使用正则表达式来完成诸如
之类的任务- 电子邮件地址验证
- 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/