0

我有以下正则表达式:

/^(\d{1,11})((?:(?:c?o|co?).*)?.*)$/i

匹配字符串,如:

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

我想排除以下开头的子字符串:

125af***** or 125AF****** or 125f****** or 125AF********

提前致谢

4

1 回答 1

2

试试这个

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

在 regexr 上查看

我对您的正则表达式进行了两项更改:

  1. 我通过在开头添加了第一组原子( )。这是为了避免回溯到已经匹配的数字,(?>\d{1,11})?>

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

于 2012-07-10T10:55:40.960 回答