7 个回答
/^(?=.{4}$)([a-z]*[aeiou]{1,4}[a-z]*)$/

: )

补充,这个版本原理是一样的,更简洁一些:

/^(?=[a-z]{4}$)(.*[aeiou]{1,4}.*)$/

下面这个是MariaDB,可惜在MySQL上面行不通
MariaDB 测试

在MySQL里面拆成两个执行:
再次更新

/^(?=^[a-zA-Z]{0,3}[aeiou])[a-zA-Z]{4}$/

grep -P '^(?=.*[aeiou])[a-zA-Z]{4}$'

(?=.*[aeiou]) 表示存在一个位置,什么位置呢?这个位置之后必会出现aeiou其中之一。由于这个位置在^之后,简单理解为:开头插入了一个预言,这个预言是:^之后必会至少出现aeiou其中之一。

[a-zA-Z]{4} 没什么好说的

于是整个 '^(?=.*[aeiou])[a-zA-Z]{4}$' 翻译过来就是:
一开头(^)我预言之后必会至少出现aeiou其中之一,4个字母后结束($)

([aeiou]...)|(.[aeiou]..)|(..[aeiou].)|(...[aeiou])

@shiji 的解答没问题,拆开就是了,效率上也不存在问题。
先匹配一次 /[a-z]{4}/,再匹配 /[aeiou]+/

/^(?=[a-z]{4}$)(.[aeiou]{1,4}.)$/

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题