写着玩,不保证对,尽可能使用较短的正则表达式来完成。
正则表达式用的是自制正则表达式测试器(逃。
- 2.1
- 在b出现之前可以是a或c,而a和c没有限制,确保出现a之后就可以出现任意字符,所以应该是c*a+[a-c]*
- 偶数个a……而且位置不确定,但是呢,可以保证的是a的数量是2的倍数,所以可以将两个a分为一组,把0也算上吧,于是就是([bc]*a[bc]*a[bc]*)*,当然吧前后两个[bc]*拿出来应该也是可以的(然后发现自制的测试器出bug了,回头再改……先用VS吧……)
- 这个就是能除4就好了,虽然是二进制的……4的二进制是100,乘4的话就是左移两位,所以末尾是两个0就好,不算0的话就是0*1+[01]*00,算0的话更短[01]*00(前面0对数字没影响所以也算上)
- 又是二进制,还是比大小,先确定至少是六位,要比101010,101100,110000都大,就可以得出(10101)、(1011)、(11)、(1)这四个前缀,换行换行换行,(10101[01]+)|(1011[01]{2,})|(11[01]{4,})|(1[01]{6,})
- 不包含baa,还是连续的……所以就用条件查找吧,任意字符串,前后都不包含(baa)就好,[a-c]*(?!(baa))[a-c]*|[a-c]*(?<!baa)[a-c]*
- P.S. 这个不确定
- 这题题目没看懂,我先找找小学语文课本;如果只是匹配十进制或八进制的话,就是(0?[0-7]+)|([1-9]+\d*)
- 数学问题不会(捂脸)
- 2.2
- 这题涉及到自动机理论什么的,由于我不是很熟所以先略过吧
- [01]{4}
- a(a{5})*
- [(0*)((101*01)*)]*
- 2.4
- 不方便画,先略过
2.3 直接用正则表达式写好了……
时间: 2024-12-10 22:34:48