所以我有一个名称列表,想用正确的格式过滤掉它们。作为参考,我需要的格式是IP :: hostname。这是我目前拥有的正则表达式公式:
^\d+(\.|\:)\d+\.\d+\.\d+::.+\w$
但是,我需要对其进行修改,以便在主机名中或主机名之后有任何冒号(:),以使其与表达式不匹配:
这与正确的匹配:
10.179.12.241::CALMGTVCSRM0210
此匹配但不应该匹配:
10.179.12.241::CALMGTVCSRM0210:as
在主机名显示后如何修改表达式以使其不匹配任何冒号的任何帮助
答案 0 :(得分:1)
.+
模式尽可能地匹配除换行符以外的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}
匹配一个点和一个八位字节图案的三个重复。