如何将语言L转换为正则表达式
How to convert language L into regular expression
我把问题贴在了上面的link,我并没有得到我想要的答案。如果数字可以以 0 开头,link 中提供的答案将是正确的。但我想指出,这是不允许的。这里描述的语言是一组整数,使得数字之和是二的倍数。或者等价地,一组具有偶数个奇数位的数字(例如 2354 有两个奇数 3,5)。我怎样才能推导出这种语言的正则表达式?任何进一步的见解将不胜感激。
假设您已经找到了一个偶数和整数。然后你可以任意扩展它
- 加偶数,或
- 添加一个奇数位,后跟 0 个或多个偶数位,再跟一个奇数位
结果将是另一个偶数和整数。
现在我们只需要一种开始的方法。偶数和整数以
开头
- 不是 0 的偶数,或者
- 一个奇数位,后接0个或多个偶数位,再接一个奇数位
我们可以将其记为正则表达式:
([2468]|[13579][02468]*[13579])([02468]|[13579][02468]*[13579])*
我把问题贴在了上面的link,我并没有得到我想要的答案。如果数字可以以 0 开头,link 中提供的答案将是正确的。但我想指出,这是不允许的。这里描述的语言是一组整数,使得数字之和是二的倍数。或者等价地,一组具有偶数个奇数位的数字(例如 2354 有两个奇数 3,5)。我怎样才能推导出这种语言的正则表达式?任何进一步的见解将不胜感激。
假设您已经找到了一个偶数和整数。然后你可以任意扩展它
- 加偶数,或
- 添加一个奇数位,后跟 0 个或多个偶数位,再跟一个奇数位
结果将是另一个偶数和整数。
现在我们只需要一种开始的方法。偶数和整数以
开头- 不是 0 的偶数,或者
- 一个奇数位,后接0个或多个偶数位,再接一个奇数位
我们可以将其记为正则表达式:
([2468]|[13579][02468]*[13579])([02468]|[13579][02468]*[13579])*