1

私たちプログラマーが次のようなタスクのためにプログラムで使用する正規表現に気付きました

  • メールアドレスの検証
  • IP 検証
  • ...

Automataで使用される正規表現とは少し異なります(私が間違っていなければ)。

ところで、私は IP 検証用の NFA を設計し、最終的には 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 で始まるかどうかをチェックし、次の 2 つの数字はそれぞれ 5 を超えることはできません。1 で始まる場合は 9 まで可能です。

正規表現を検証する最も簡単な方法は.、区切り記号として を使用して分割し、文字列を数値に変換して、その範囲を確認することです。

とはいえ、投稿した正規表現には非標準のものはありません。それは彼らが来るのと同じくらい簡単ですが、なぜそれがそのままでは機能しないのかわかりません.

于 2012-05-27T13:36:55.263 に答える