正则表达式用端口验证url,需要澄清

时间:2013-02-14 19:37:50

标签: java regex

我正在尝试使用Java

中的以下正则表达式匹配网址
^http(s*):\\/\\/.+:[1-65535]/v2/.+/component/.+$

使用网址测试失败:https://box:1234/v2/something/component/a/b

我怀疑这是造成它的数字范围。请帮助我理解我在这里缺少什么?

3 个答案:

答案 0 :(得分:4)

http://www.regular-expressions.info/numericranges.html。您不能只写[1-65535]来匹配165535。这表示任意数字1-6,或53

你需要的表达式非常详细,在这种情况下:

([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/.+$