-4

次の正規表現は IP アドレスに一致します: \b(?:\d{1,3}.){3}\d{1,3}\b

IP アドレスの最初の 3 オクテットのみに一致するように変更するにはどうすればよいですか?

したがって、1.2.3.4 が提供されている場合、1.2.3 にのみ一致します。

ありがとう!正規表現の初心者。

4

2 に答える 2

1

まず、指定した正規表現が正しくありません。これは IP アドレスに一致しますが、192a168.1f12. その理由は、.任意の文字に相当する正規表現の特殊文字だからです。これを a でエスケープすると、IP アドレスの正規表現が\得られます。\b(?:\d{1,3}\.){3}\d{1,3}\b

次に、正規表現を分析します。これは 2 つの主要な部分で構成されています。a a.b.c.、b、c が 1 ~ 3 桁の数字である部分です (技術的には 255 になるはずなので IP アドレスではありませんが、十分に近い値です)。 ) そして、最後の 1 ~ 3 桁の数字部分があります。最初の部分が で終わり、{3}3 回出現するように指定されていることに注意してください。2 回だけ表示し、その後に同じ 2 番目の部分を表示したいので、\b(?:\d{1,3}\.){2}\d{1,3}\b.

これで十分なはずですが、要件によっては、正先読みを使用して、最初の 3 つのオクテットの後に最後のオクテットが続くようにすることもできます (ただし、一致しない)。

また、一致しないグループは実際には必要ないため、正規表現を次のように単純化できます。

\b(\d{1,3}\.){2}\d{1,3}\b

于 2013-07-11T20:13:06.673 に答える
0

これを行う:

address: \b(?:\d{1,3}.){2}\d{1,3}\b

さて、上記はどういう意味ですか?\d{1,3} は 1 ~ 3 桁であって、それ以上でもそれ以下でもないことを意味します。ドット.は実際には任意の文字に一致します (ドットを含む、より正確には\.)。このステートメントは括弧内にあるため、ここで告白しなければなりませんが、使用している言語はわかりませんが、PHP だと思われるのでわかりません。が何をするのか本当にわかり?:ません。しかし、{2}それらの後に、パターンが 2 回繰り返されると書かれており、最後\d{1,3}は 3 番目のオクテットに一致します。

于 2013-07-11T19:46:04.310 に答える