0

私は新しい開発者であり、正規表現についてあまり触れていません。今日、正規表現を使用してバグを修正するように割り当てましたが、多くの努力の結果、エラーを見つけることができません。

これが私の要件です。

私のコードは次のとおりです。

string regex = "^([A-Za-z0-9\\-]+|[A-Za-z0-9]{1,3}\\.[A-Za-z0-9]{1,3}\\.[A-Za-z0-9]    {1,3}\\.[A-Za-z0-9]{1,3}):([0-9]{1,5}|\\*)$";

Regex _hostEndPointRegex = new Regex(regex);

bool isTrue = _hostEndPointRegex.IsMatch(textBox1.Text);

「nikhil-dev.in.abc.ni:8080」のようなドメイン名のエラーをスローしています。

どこに問題があるのか​​ わかりません。

4

1 に答える 1

2

あなたの正規表現は、あなた、またはすでに他のブロックに含まれているもので少し冗長です。

私はあなたがしなければならなかったことを単純化しました

(?:[A-Za-z0-9-]+\.)+[A-Za-z0-9]{1,3}:\d{1,5}

そしてそれはうまく動作します...

\ がホスト名で許可されていないことは確かなので、許可された文字に \ が含まれている理由はわかりません。

あなたの問題は、あなたのまたは | このように物事を分解します...

[A-Za-z0-9\\-]+

また

[A-Za-z0-9]{1,3}\\.[A-Za-z0-9]{1,3}\\.[A-Za-z0-9]{1,3}\\.[A-Za-z0-9]{1,3}

また

\*

コメンターが言ったように、2番目のブロックに「-」が含まれていませんでした。

だからおそらくあなたは意図した

^((?:[A-Za-z0-9\\-]+|[A-Za-z0-9]{1,3})\.[A-Za-z0-9]{1,3}\.[A-Za-z0-9]{1,3}\.[A-Za-z0-9]{1,3}):([0-9]{1,5}|\*)$

ただし、+ には {1-3} が含まれているため、最初から 2 つの or で囲まれた項目は冗長になります。

すなわち。[A-Za-z0-9\-]+ は、これが [A-Za-z0-9]{1,3} に一致するものすべてに一致します

このツールを使用して正規表現をテストできます: http://regexpal.com/

個人的には、すべての開発者がregexbuddyを持つべきだと思います

上記の正規表現は機能しますが、無効なホスト名を許可します。

最初の文字で句読点を許可しないように変更する必要があります。

したがって、このように変更する必要があります。

(?:[A-Za-z0-9][A-Za-z0-9-]+\.)(?:[A-Za-z0-9-]+\.)+[A-Za-z0-9]{1,3}:\d{1,5}

また、理論的には、ホストをハイフンで終わらせることはできません。

それはすべて非常に複雑なので、正規表現を使用して部分をキャプチャし、Uri.CheckHostName を使用して実際に Uri が有効であることを確認します。

または、CodeCaster が提案する正規表現を使用することもできます

于 2013-04-17T11:35:51.467 に答える