扫码关注官方订阅号
这个有点难度的,/[aeiou]{1,4}/ 这样写有点问题的
业精于勤,荒于嬉;行成于思,毁于随。
/^(?=.{4}$)([a-z]*[aeiou]{1,4}[a-z]*)$/
: )
补充,这个版本原理是一样的,更简洁一些:
/^(?=[a-z]{4}$)(.*[aeiou]{1,4}.*)$/
下面这个是MariaDB,可惜在MySQL上面行不通
在MySQL里面拆成两个执行:
/^(?=^[a-zA-Z]{0,3}[aeiou])[a-zA-Z]{4}$/
grep -P '^(?=.*[aeiou])[a-zA-Z]{4}$'
(?=.*[aeiou]) 表示存在一个位置,什么位置呢?这个位置之后必会出现aeiou其中之一。由于这个位置在^之后,简单理解为:开头插入了一个预言,这个预言是:^之后必会至少出现aeiou其中之一。
(?=.*[aeiou])
[a-zA-Z]{4} 没什么好说的
于是整个 '^(?=.*[aeiou])[a-zA-Z]{4}$' 翻译过来就是:一开头(^)我预言之后必会至少出现aeiou其中之一,4个字母后结束($)
'^(?=.*[aeiou])[a-zA-Z]{4}$'
([aeiou]...)|(.[aeiou]..)|(..[aeiou].)|(...[aeiou])
@shiji 的解答没问题,拆开就是了,效率上也不存在问题。先匹配一次 /[a-z]{4}/,再匹配 /[aeiou]+/
/^(?=[a-z]{4}$)(.[aeiou]{1,4}.)$/
微信扫码关注PHP中文网服务号
QQ扫码加入技术交流群
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
PHP学习
技术支持
返回顶部
: )
补充,这个版本原理是一样的,更简洁一些:
下面这个是MariaDB,可惜在MySQL上面行不通

在MySQL里面拆成两个执行:

/^(?=^[a-zA-Z]{0,3}[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}.)$/