次の正規表現を使用して URL を一致させようとしています。Java
^http(s*):\\/\\/.+:[1-65535]/v2/.+/component/.+$
URL を使用したテストは失敗します:https://box:1234/v2/something/component/a/b
数値範囲が原因だと思います。ここで何が欠けているのか理解してください。
http://www.regular-expressions.info/numericranges.htmlを参照してください。または[1-65535]
に一致するように書くことはできません。それは、任意の数、またはまたはを意味します。1
65535
1-6
5
3
この場合、必要な式は非常に冗長です。
([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://
です。正規表現が公開入力を受け取る場合、これは懸念事項です。
^http(s*)
間違っている、それは許すだろうhttpssssss://...
あなたが必要^https?
ただし、これは特定のテストには影響しません。
グループ[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/.+$