这个有点难度的,/[aeiou]{1,4}/ 这样写有点问题的
拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...
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])
/^(?=^[a-zA-Z]{0,3}[aeiou])[a-zA-Z]{4}$/
/^(?=.{4}$)([a-z]*[aeiou]{1,4}[a-z]*)$/
: )
补充,这个版本原理是一样的,更简洁一些:
/^(?=[a-z]{4}$)(.*[aeiou]{1,4}.*)$/
下面这个是MariaDB,可惜在MySQL上面行不通
在MySQL里面拆成两个执行:
(?=.*[aeiou]) 表示存在一个位置,什么位置呢?这个位置之后必会出现aeiou其中之一。由于这个位置在^之后,简单理解为:开头插入了一个预言,这个预言是:^之后必会至少出现aeiou其中之一。
[a-zA-Z]{4} 没什么好说的
于是整个 '^(?=.*[aeiou])[a-zA-Z]{4}$' 翻译过来就是:
一开头(^)我预言之后必会至少出现aeiou其中之一,4个字母后结束($)
([aeiou]...)|(.[aeiou]..)|(..[aeiou].)|(...[aeiou])
/^(?=^[a-zA-Z]{0,3}[aeiou])[a-zA-Z]{4}$/
/^(?=.{4}$)([a-z]*[aeiou]{1,4}[a-z]*)$/
: )
补充,这个版本原理是一样的,更简洁一些:
/^(?=[a-z]{4}$)(.*[aeiou]{1,4}.*)$/
下面这个是MariaDB,可惜在MySQL上面行不通
在MySQL里面拆成两个执行: