3

こんにちはすべての正規表現初心者はここにいます。、

IPv6アドレスを検証する正規表現を作成しようとしています。ポート部分はまだ追加していません。最初にアドレス部分を機能させたいと思います。

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

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

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

4

2 に答える 2

3

正規表現は文字列パターンマッチングに最適なツールですが、ここでその弱点の1つに遭遇しました。ブラケットのペアを一致させると、注意が必要になる場合があります。

より複雑な状況(つまり、プログラムコードを読み取ろうとする場合)では、解決策は正規表現をまったく使用せず、適切なコードパーサーを使用することです。

関係する正規表現構文は非常に厄介である可能性があり、このようなより高度な正規表現機能では、実装ごとに異なる構文が使用される可能性があるため、かなり単純なケースでも答えるのが難しい場合があります。この質問は、それをどのように行うか、および使用する可能性のあるさまざまな構文に関するヒントを提供する場合があります。

ただし、あなたの場合、問題はそれほど複雑ではなく、かなり単純な解決策が提示されます。式全体を必要な両方の角かっこで一致させるか、式全体をどちらの角かっこで一致させないでください。つまり、式の主要部分を2回繰り返します。1回は角かっこ付き、もう1回は角かっこなし、そしてorそれらの間のパイプです。

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

お役に立てば幸いです。

于 2012-04-16T20:28:33.233 に答える
-1

古い質問だと思います...しかし、このregexでも使用できます:^([0-9a-fA-F] + :) {7} [0-9a-fA-F]+$またはこれ:^ [0-9a-fA-F] {1,4}:[0-9a-fA-F] {1,4}:[0-9a-fA-F] {1,4}:[0- 9a-fA-F] {1,4}:[0-9a-fA-F] {1,4}:[0-9a-fA-F] {1,4}:[0-9a-fA-F ] {1,4}:[0-9a-fA-F] {1,4} $

于 2019-08-21T13:24:20.390 に答える