正则表达式无法正确排除含连字符模式的问题求助
解决方案
你的问题出在原正则的[^-]*.*部分——[^-]*仅匹配到第一个-前的内容,后续的.*会无差别匹配包括-在内的所有字符,导致无法排除含-的字符串。同时原正则未锚定字符串首尾,可能出现部分匹配的情况。
根据你的需求,正确的正则表达式应该是:
^_*[a-zA-Z][a-zA-Z0-9_]*(?<!_)$
规则拆解
^:锚定字符串起始位置,确保从开头开始验证_*:允许0个或多个下划线开头[a-zA-Z]:强制要求下划线(如果有的话)之后必须以字母开头,排除纯数字或下划线后接数字的情况[a-zA-Z0-9_]*:后续仅允许字母、数字、下划线,直接排除任何-的存在(?<!_):负向断言,确保字符串结尾不是下划线$:锚定字符串结束位置,确保整个字符串都符合规则
测试验证
- 匹配成功:
a100__version_2、_a100__version2 - 匹配失败(排除):
100__version_2、a100__version2_、_100__version_2、a100--version-2
内容的提问来源于stack exchange,提问作者bokaj92
相关产品推荐
相关产品推荐

