我正在尝试使用Java
^http(s*):\\/\\/.+:[1-65535]/v2/.+/component/.+$
使用网址测试失败:https://box:1234/v2/something/component/a/b
我怀疑这是造成它的数字范围。请帮助我理解我在这里缺少什么?
答案 0 :(得分:4)
见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://
。如果你的正则表达式需要公开输入,这是一个问题。
答案 1 :(得分:2)
^http(s*)
错误,允许httpssssss://...
您需要^https?
但这并不影响给定的测试。
答案 2 :(得分:1)
组[1-65535]
基本上是指1到6或5或5或3或5的数字。
甚至可以评估,但你需要在组的末尾加上+(或*)。
为了更精确地匹配端口,您可以使用[1-6][0-9]{0,4}?
。这会让你非常接近,但也允许p.e. 69999 - {m,n}?
用于指定组的使用频率(m到n次)
还要注意其他人指出的那个(s *)事情!
这将导致:
^https?:\\/\\/.+:[1-6][0-9]{0,4}?/v2/.+/component/.+$