所以我有一个名字列表,想过滤掉格式正确的名字。作为引用,我需要的格式是 IP::hostname。这是我目前拥有的正则表达式公式:
^\d+(\.|\:)\d+\.\d+\.\d+::.+\w$
但是,我需要修改它,以便如果主机名中或之后有任何冒号 (:),则它与表达式不匹配:
这匹配正确的是:
10.179.12.241::CALMGTVCSRM0210
这匹配但不应该:
10.179.12.241::CALMGTVCSRM0210:as
任何关于如何修改我的表达式以不匹配主机名后的任何冒号的帮助将不胜感激
请您参考如下方法:
.+
pattern 匹配除换行符以外的 1 个或多个字符,尽可能多,因此匹配允许它们的冒号。你需要一个 negated character class , [^:]*
, 这将匹配除冒号以外的 0+ 个字符。
您可以使用
修复您的正则表达式(并增强一点)^\d+[.:]\d+\.\d+\.\d+::[^:]*\w$
^^^^^
参见 regex demo
为确保您想要匹配您宁愿使用的有效 IP
^(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)(?:\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}::[^:]*\w$
参见 another regex demo (IP regex source)。 (?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)
匹配来自 0
的单个八位字节至 255
和 (?:\.<octet_pattern>){3}
匹配三个重复的点和八位字节模式。