C ++
 Computer >> コンピューター >  >> プログラミング >> C ++

C++のReGexパターンを使用してIPv4アドレスを検証します


IPアドレスが与えられた場合、タスクはこのIPアドレスを検証し、ReGex(正規表現)を使用してIPv4であるかどうかを確認することです。 IPアドレスが有効な場合は「IPv4アドレス」を出力し、そうでない場合は「Not」を出力します。

有効なIPv4アドレスは、「X1.X2.X3.X4」の形式のIPです。ここで、0 <=Xi <=255であり、Xiに先行ゼロを含めることはできません。たとえば、「192.168.1.1」と「192.168.1.0」は有効なIPv4アドレスですが、「192.168.01.1」ですが、「192.168.1.00」と「192.168@1.1」は無効なIPv4アドレスです。たとえば、

入力-1

IP= “172.15.254.2”

出力

“IPv4”

説明 −これは有効なIPv4アドレスであり、「IPv4」を返します。

入力-2

IP= “312.25.12.1”

出力

“Not”

説明 −これは有効なIPv4アドレスではありません。「いいえ」を返します。

この問題を解決するためのアプローチ

指定されたIPアドレスがIPv4であるかどうかを確認するには、ReGexを使用します。 ReGexは、特定のパターンを定義する一連の文字を含む式です。これらのパターンをアルゴリズムで使用して、文字列のパターンと一致させることができます。入力検証にも広く使用されています。

範囲仕様 −最も簡単な方法でパターンを作成するための文字を指定できます。文字を使用して範囲を指定するには、「[]」角かっこを使用できます。

文字の指定 −上記の式は、正規表現として、aからz、「A」から「Z」、および「0」から「9」の範囲の開き角かっこと数字を示します。 [a-z]、[A-Z]、[0-9]。

繰り返されるパターン −式修飾子は、パターンの出現を1回以上一致させることを示唆する「+」、またはパターンの出現を0回以上一致させることを示唆する「*」にすることができます。

式[a-z]*は空白の文字列に一致します。

1回以上一致する文字のグループを指定する場合は、次のように括弧を使用できます-

[Abc]+

この問題を解決するためのアプローチは次のとおりです。

  • IPアドレスを指定する文字列を入力します。

  • 文字列関数validIPAddress(string IP)は、入力としてIPアドレスを受け取り、入力された文字列が有効かどうかを確認します。有効な場合は「IPv4」を返し、そうでない場合は「IPアドレスではありません」を返します。

  • IPv4アドレスの正規表現パターンを作成します。 IPv4アドレスには4つのフィールドが含まれているため、各フィールドには0〜255の範囲の値が含まれます。 IPv4アドレスはXXX.XXX.XXX.XXXのようになります。

  • 有効なIPv4アドレスは次の範囲にある可能性があります(([0-9] | [1-9] [0-9] | 1 [0-9] [0-9] | 2 [0-4] [0-9 ] | 25 [0-5])\\。){3}ここで、最初の桁は0〜9の範囲、2番目の桁は0〜9の範囲、3番目の桁は0〜9の範囲になります。

  • 同様に、2番目のフィールドの場合、最初の文字は100〜199の範囲になります。したがって、正規表現パターンは「1[0-9]-0-9]」になります

  • 次のフィールドでは、数字は200〜249の範囲になります。したがって、正規表現パターンは「2 [0-4] [0-9]」になり、範囲が255を超える桁を超えないようにします。

  • 次のフィールドである最後のフィールドには、250〜255の範囲の数字が含まれているため、正規表現パターンは25[0-5]になります。

#include<bits/stdc++.h>
using namespace std;
string validIPAddress(string IP) {
   regex ipv4("(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\\.){3}([0- 9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])");
   if(regex_match(IP, ipv4))
      return "IPv4";
   else
      return "Not";
}
int main(){
   string IP= “172.16.254.1”;
   string ans= validIPAddress(IP);
   cout<<ans<<endl;
   return 0;
}

出力

上記のコードを実行すると、次のように出力が生成されます

IPv4

入力されたIPアドレスは有効なIPアドレスであるため、「IPv4」を返します。


  1. C++でのAndroidのロック解除パターン

    Android 3x3キーロック画面と2つの整数mとnがあり、mとnの値が1≤m≤n≤9の範囲にあるとします。Androidロック画面のロック解除パターンの総数をカウントする必要があります。最小m個のキーと最大n個のキーで構成されます。 ルールは次のようになります。各パターンは、少なくともm個のキーと最大でn個のキーを接続する必要があります。すべてのキーは一意である必要があります。パターン内の2つの連続するキーを結ぶ線が他のキーを通過する場合、他のキーはパターン内で事前に選択されている必要があります。選択されていない、許可されていないキーをジャンプします。使用するキーの順序が重要です。

  2. Python Regexを使用して、特定の文字列内の「1(0+)1」のすべてのパターンを検索します

    このチュートリアルでは、正規表現を使用して、文字列内の1(0 + 1)のすべての出現を検出するプログラムを作成します。 。 Pythonには、正規表現を操作するのに役立つreモジュールがあります。 1つのサンプルケースを見てみましょう。 Input: string = "Sample 1(0+)1 string with 1(0+)1 unnecessary patterns 1(0+)1" Output: Total number of pattern maches are 3 ['1(0+)1', '1(0+)1', '1(0+