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]匹配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://. 如果您的正则表达式接受公共输入,这是一个问题。

于 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 回答