如何用单一正则表达式(Regex)匹配第二个字符为O且以IONS结尾的单词?
解决方案
你需要的正则表达式可以这样写:
^(?=.{1}O)[A-Z]*IONS$
正则说明
^(?=.{1}O):正向预查规则,确保字符串的第二个字符是大写O(.{1}匹配第一个任意大写字母,紧接着必须是O,对应分步筛选的第一个条件)。预查仅做条件验证,不消耗字符,不会限制后续结尾匹配的长度。[A-Z]*IONS$:匹配由任意数量大写字母组成、且以IONS结尾的字符串(对应分步筛选的第二个条件)。其中[A-Z]*可以匹配0个字符,因此能兼容IONS本身——它既满足第二个字符是O,又符合以IONS结尾的要求。
原正则的问题
你之前使用的^.O[A-Z]*IONS$要求字符串前两位为「任意字符+O」,后续再接「任意大写字母+IONS」,总长度至少为6位(2位+4位),但IONS仅4位,无法满足该长度限制,因此被排除。而新正则通过预查分离“第二个字符是O”的条件,不占用长度配额,完美覆盖短单词场景。
测试验证
- 匹配
CONGRATULATIONS:第二个字符是O,结尾为IONS,符合条件 - 匹配
IONS:第二个字符是O,结尾为IONS,符合条件 - 不匹配
ACTION(第二个字符非O)、OPERATIONS(第二个字符为P)等不符合要求的单词
内容的提问来源于stack exchange,提问作者RomainP
相关产品推荐
相关产品推荐

