我知道在这个领域有很多问题,但是我还没有找到一个能为我的问题提供任何帮助或答案的问题,作为一个完整的regex,我需要你的帮助。
我使用这个正则表达式来验证端口号:
^([0-9]{1,4}|[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])$但是,是否有可能创建一个正则表达式,它既可以验证单个端口号,也可以验证portStart:portEnd格式的端口范围?
示例:
允许:
6112
6112:6120
27015:28000不允许:
6112:
:6113
6112-7777
27100(any other character than colon)28000发布于 2016-08-26 10:53:15
编辑:在注释中,您提到了范围验证意味着检查第一个范围部分是否低于第二个范围部分。当然,regex是不可能的(只有.NET regex才能做到这一点,但是模式会被过度杀死),与:拆分,将两个块大小写为数字和比较数字。
如果您只想确保字符串是一个端口或任意顺序的一系列端口,您可以尝试一个带有可选组(?:<PATTERN_BLOCK>)?的正则表达式。只在不能使用任何专用编程语言即的情况下才使用regex。
^([0-9]{1,4}|[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])(?::([0-9]{1,4}|[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]))?$把它分成几块:
^ # Start of string
( # Port number regex
[0-9]{1,4}|
[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]
)
(?: # Optional group start
: # The port range delimiter
( # Port number regex
[0-9]{1,4}|
[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]
)
)? # Optional group end
$ # End of stringhttps://stackoverflow.com/questions/39162558
复制相似问题