2012-04-16 15 views
3

こんにちはすべてここで初心者です、正規表現のIPv6検証とオプションの角括弧

私はIPv6アドレスを検証する正規表現を書こうとしています。私はまだポート部分を追加していない、私は最初に働くアドレス部分を取得したい。

これは私がこれまで持っているものです。

\\[?(?:[:0-9A-Fa-f]+)\\]? 

これは開閉ブラケットはオプションになります。しかし、あなたが見ることができるように、それらは独立してオプションです。正規表現を使用して、の両方の開閉括弧、またはのどちらもも必要とする方法はありますか?

答えて

2

正規表現は文字列パターンマッチングの優れたツールですが、ここでは弱点の1つに当たっています。角かっこのペアをマッチさせることは難しいことがあります。

さらに複雑な状況、つまりプログラムコードを読み込もうとしている場合、解決策は正規表現を使用するのではなく、適切なコードパーサーを使用することです。

このような高度な正規表現機能では、さまざまな構文が異なる構文を使用する可能性があるため、正規表現の構文がかなり複雑になる可能性があるため、かなり単純なケースでも扱いにくいことがあります。 This questionは、どのように動くかについてのヒントや、使用する可能性のあるさまざまな構文を提供するかもしれません。

しかし、あなたのケースでは、問題はあまりにも複雑ではなく、非常に簡単な解決法が提示されます:必要な大括弧と大括弧の両方で式全体を一致させるだけです。つまり、なしで一度ブラケット付きと1回、2回、あなたの表現の主要部分を繰り返し、それらの間orためのパイプ:

\(\[(?:[:0-9A-Fa-f]+)\])|(?:[:0-9A-Fa-f]+)\ 

希望に役立ちます。

+0

もう少し調べてみたら、正規表現のその部分を複製しなければならないという同じ結論に達しました。私を助けてくれてありがとう! –

関連する問題