如何用regex匹配指定词组后紧跟的字符串,解决短词为长词子串的问题
问题根因
你使用的正则(?<=the|these)\w+存在的问题是交替分支的匹配顺序错误:
绝大多数正则NFA引擎处理交替分支时会从左到右依次尝试,匹配到第一个符合条件的分支就会停止校验剩余分支。当匹配thesePeople时,字符串前3个字符刚好命中左侧的the分支,引擎就不会再校验更长的these分支,最终返回的匹配结果就是the后面的sePeople。
解决方法
只要把更长的匹配分支放到交替列表的最左侧,让引擎优先校验更长的前缀即可,修正后的正则如下:
@"(?<=these|the)\w+"
验证结果
- 输入
thesePeople:匹配到these作为前缀,返回结果People,符合预期 - 输入
theApple:匹配到the作为前缀,返回结果Apple,符合预期
如果需要适配更多长度不同的前缀词组,通用规则是所有前缀按长度从长到短排序后再写入交替分支,就能避免短前缀先匹配导致的问题。
内容的提问来源于stack exchange,提问作者Seaky Lone
相关产品推荐
相关产品推荐

