如何验证字符串是否以点开头且其他位置包含冒号?
正则表达式修正方案
你的需求是验证字符串以.开头,且除开头外的任意位置包含:,原正则^[.][:]*不符合预期的原因如下:
[:]*是错误写法:正则字符类[]中,直接写:就能匹配冒号,[:]属于无效语法;另外*表示零次或多次匹配,这意味着即使字符串后面没有冒号也会被匹配,完全不满足“必须包含冒号”的要求。
正确的正则表达式
推荐两种可靠写法:
写法1:基础匹配
^\..*:.*$
各部分含义:
^:锚定字符串开头\.:匹配开头的.(.是正则通配符,必须转义).*:匹配任意数量的任意字符(允许零个)::匹配必须存在的冒号.*:匹配冒号后的任意内容(可选)$:锚定字符串结尾
写法2:高效预查(推荐)
^\.(?=.*:).*$
(?=.*:)是正向预查,作用是在匹配开头的.后,提前检查字符串中是否存在至少一个:,如果不存在直接判定不匹配,比写法1更高效。
测试示例
- 匹配成功:
.abc:def、.test:、.x:y.z - 匹配失败:
abc:def(不以.开头)、.abcdef(无冒号)、:abc.def(不以.开头)
内容的提问来源于stack exchange,提问作者E1dar
相关产品推荐
相关产品推荐

