急。求一个正则表达式,实在想不清楚了。。。

试试这个:
([abcd])(?!\1)([abcd])(?!\1|\2)([abcd])(?!\1|\2|\3)([abcd])


匹配结果见:


运行16楼程序,结果见下:


我说一下自己的解决思路。

  • 第一个字母是abcd中的任意一个,因此正则式[abcd]即符合要求。第一个字母最简单。
  • 第二个字母是abcd中的任意一个,但是不能使用第一步中已经使用过的字母。因此回退一步,将第一个字母括起来,以备引用([abcd])。不能使用\1,亦即(?!\1),它表示当前位置不出现\1,即第一个字母。至此,正则式如下:([abcd])(?!\1)([abcd])。
  • 第三个字母与第二个字母的原理相同,但是它既不能使用第一个字母,也不能使用第二个字母。正则式如下:([abcd])(?!\1)([abcd])(?!\1|\2)([abcd])。
  • 第四步无需多言,完整正则式如下:([abcd])(?!\1)([abcd])(?!\1|\2)([abcd])(?!\1|\2|\3)([abcd])。


Hello zhasm,
你用的这个工具叫什么啊
此工具叫RegexBuddy,官方网站(英文)在http://www.regexbuddy.com,此工具运行在win下。在linux中使用wine也能正常运行。其中文介绍、软件索取请见这里http://iregex.org/blog/regexbuddy.html。
我也来一个:
(?!.{0,2}(.)\1)(?!.?(.).\2)(?!(.)..\3)[abcd]{4}



QUOTE:
原帖由 zhasm 于 2008-12-5 08:01 发表
此工具叫RegexBuddy,官方网站(英文)在http://www.regexbuddy.com,此工具运行在win下。在linux中使用wine也能正常运行。其中文介绍、软件索取请见这里http://iregex.org/blog/regexbuddy.html。

这是个好东东