0

次の正規表現を使用して URL を一致させようとしています。Java

^http(s*):\\/\\/.+:[1-65535]/v2/.+/component/.+$

URL を使用したテストは失敗します:https://box:1234/v2/something/component/a/b

数値範囲が原因だと思います。ここで何が欠けているのか理解してください。

4

3 に答える 3

4

http://www.regular-expressions.info/numericranges.htmlを参照してください。または[1-65535]に一致するように書くことはできません。それは、任意の数、またはまたはを意味します。1655351-653

この場合、必要な式は非常に冗長です。

([1-9][0-9]{0,3}|[1-5][0-9]{4}|6[0-4][0-9]{3}|65[0-4][0-9]{2}|655[0-2][0-9]|6553[0-5])

( http://utilitymill.com/utility/Regex_For_Rangeへのクレジット)

別の問題はあなたhttp(s*)です。それはhttps?、現在の形式では許可される可能性があるためhttpsssssssss://です。正規表現が公開入力を受け取る場合、これは懸念事項です。

于 2013-02-14T19:45:19.113 に答える
2

^http(s*)間違っている、それは許すだろうhttpssssss://...

あなたが必要^https?

ただし、これは特定のテストには影響しません。

于 2013-02-14T19:43:26.120 に答える
1

グループ[1-65535]は基本的に 1 から 6 または 5 または 5 または 3 または 5 の数字を意味します。これは評価されることもありますが、グループの最後に + (または *) が必要です。

ポートをより正確に一致させるには、を使用できます[1-6][0-9]{0,4}?。それはあなたを本当に近づけますが、pe 69999も許可します-これ{m,n}?は、グループを使用できる頻度を指定するために使用されます(m〜n回)

他の人が指摘した (s*) ことも気をつけて!

その結果、次のようになります。 ^https?:\\/\\/.+:[1-6][0-9]{0,4}?/v2/.+/component/.+$

于 2013-02-14T19:43:15.927 に答える