Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
3.2k views
in Technique[技术] by (71.8m points)

正则表达式匹配字符串中出现a,b,c三个字母各一次并且顺序任意

如题,今天突然想到这么个题目,没想出来答案。请大神们指教一下。


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

正向写这个正则太恶心了,需要枚举6种排序方式.但是,如果把你的要求反过来看,就是不能达成 abc三个字母必须出现且只能出现一次 的情况,就必然会满足以下的条件之一:

  • 没有出现 a
  • 没有出现 b
  • 没有出现 c
  • a 至少出现两次
  • b 至少出现两次
  • c 至少出现两次

只要出现以上的六种情况,那么必然就没有达成你的原始要求,那么正则如下:

^([^a]+|[^b]+|[^c]+|([^a]*a[^a]*){2,}|([^b]*b[^b]*){2,}|([^c]*c[^c]*){2,})$

ps. 这个正则如果匹配成功,就说明不符合要求

图示如下:
image.png

我不考虑字符串为空的情况哈,你要考虑自己加上.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...