用于匹配端口的正则表达式。以破折号或逗号分隔

用于匹配端口的正则表达式。以破折号或逗号分隔

我正在尝试获取有效的正则表达式语法来匹配以下值。该字段可以包含

  1. 逗号分隔的值或单个值。例如“22”或“22,456”
  2. 带破折号的端口范围。例如“22-600”

值的范围是 1 到 65535

尝试

正确匹配单个端口,但不支持“,”或“-”

^(6553[0-5]|655[0-2][0-9]|65[0-4][0-9]{2}|6[0-4][0-9]{3}|[1-5][0-9]{4}|[1-9][0-9]{1,3}|[0-9])(?:,(?1))*$

不匹配单个端口,但匹配多个逗号分隔的端口

^(6553[0-5]|655[0-2][0-9]|65[0-4][0-9]{2}|6[0-4][0-9]{3}|[1-5][0-9]{4}|[1-9][0-9]{1,3}|[0-9])(?:,(?1))(?:,(?1))*$

与单个端口不匹配,但与某个端口范围匹配

^(6553[0-5]|655[0-2][0-9]|65[0-4][0-9]{2}|6[0-4][0-9]{3}|[1-5][0-9]{4}|[1-9][0-9]{1,3}|[0-9])(?:-(?1))(?:(?1))*$

答案1

我建议:

^(6553[0-5]|655[0-2][0-9]|65[0-4][0-9]{2}|6[0-4][0-9]{3}|[1-5][0-9]{4}|[1-9][0-9]{0,3})-(?1)|(?1)(,(?1))+$

第一个正则表达式 hat[0-9]作为最后一个选项,允许 0 作为值。我修改了它并添加了其他选项。

https://regexr.com/5dvdk

相关内容