当前位置 博文首页 > 广大菜鸟的博客:奇数个a和偶数个b正则表达式
本文参考形式语言:含偶数个零和奇数个一的正则表达式
先报答案:
String pattern = "(a|b(bb|aa)*(ba|ab))(bb|aa|(ba|ab)(bb|aa)*(ba|ab))*";
背景是这样:
明天要考编译原理了,做到这样的一个题
不知道咋写这正则表达式,先看这答案的DFA妙啊,
然后准备些正规表达式,这…,我不会
上网百度了一波,有很多类似的形式语言:含偶数个零和奇数个一的正则表达式
不过,他们直接放下面第二部分内容,我愣逼了,知道看到上面参考的那篇博客就开始理解了
偶数个0和偶数个1的正则表达式是
(00|11 | (01|10) (00|11)* (01| 10))*
我换成另一种方式,希望可以方便大家理解
如果,这还不能理解,直接实践检验真理
public class Test{
public static void main(String[]args){
String[] test =new String[]{
"bab","bbabb","babb","bbab","baab","bbaabb","baabb","bbaab","baaab","bbaaabb","baaabb",
"bbaaab","baaba","bbaabba","baabba","bbaaba","abaab","abbaabb","abaabb","abbaab"
};
// 奇个a偶数个b
String pattern = "(a|b(bb|aa)*(ba|ab))(bb|aa|(ba|ab)(bb|aa)*(ba|ab))*";
// 偶数个a和偶数个b时
//String pattern = "(aa|bb|(ab|ba)(aa|bb)*(ab|ba))*";
for(String s:test) {
System.out.println(s+"->"+s.matches(pattern));
}
}
}
但,我觉得太复杂,没有答案给的那个图那样简洁,希望评论区可以给个检验。
cs