Ruby regexp应该排除“125af”子串

时间:2012-07-10 10:36:03

标签: ruby regex

我有以下正则表达式:

/^(\d{1,11})((?:(?:c?o|co?).*)?.*)$/i
匹配字符串的

125******* or 125co****** or 125CO*******

我想排除以:

开头的子串
125af***** or 125AF****** or 125f****** or 125AF********

提前致谢

1 个答案:

答案 0 :(得分:2)

试试这个

^(?>\d{1,11})(?!af|a|f)((?:(?:c?o|co?).*)?.*)$

here on regexr

我对你的正则表达式进行了两处修改:

  1. 我通过在开始时添加(?>\d{1,11})来创建第一个组atomic?>)。这是为了避免回溯到已经匹配的数字,

  2. 我添加了negative lookahead (?!af|a|f),以确保没有af,a或f跟随。为了实现这个目的,我需要第一组是原子的,以确保它真正照看前面的最后一个数字。 (否则它会回溯,看到前面的最后一个数字,认为一切都很好,并与最后一个.*匹配其余的字符串