我正在努力学习正则表达式。我有
L = {a, b, x, y, z, i, o, u, e, c}
我想构建一个正则表达式,用于描述按字母顺序(aeiou)包含五个元音的字符串。所有字符串都至少有五个元音中的一个。
我是否必须按顺序将它们排列在一起?像
a(b*x*y*z*i*o*u*ec*)iou
或者我可以将它们混合起来:
aeiou(b*x*y*z*c*)
因为,他们在集合中没有顺序,这是否意味着第一个解决方案是我正在寻找的?
答案 0 :(得分:0)
在大多数正则表达式语言中,您需要以下内容:
[^aeiou]*a[^aeiou]*e[^aeiou]*i[^aeiou]*o[^aeiou]*u[^aeiou]*
这基本上是统一的。然后,您必须处理“单词开头”和“单词结束”问题,这取决于上下文和正则表达式语言。每行一个字,您只需使用“^
”开始和“$
”。
使用您的首选符号并知道所使用的完整字母包含10个字母,并假设您可以进行分组,那么您可以写:
(b*c*x*y*z*)*a(b*c*x*y*z*)*e(b*c*x*y*z*)*i(b*c*x*y*z*)*i(b*c*x*y*z*)*u(b*c*x*y*z*)*
(b*c*x*y*z*)*
部分表示零次或多次重复“0或更多b,然后是零或更多c,......,然后是零或更多z”。这可以满足您的需求;但它也证明了为什么字符类符号是一个好主意。