我被要求显示DFA图和RegEx作为RegEx的补充(00 + 1)*.在之前的问题中,我必须证明DFA的补充是封闭的并且也是正则表达式,所以我知道要将DFA,M转换为补码,M`,我只需要交换初始接受状态和最终接受国家.
但是,似乎RegEx的初始接受状态是{00, 1, ^},最终接受状态也是{00, 1, ^}如此.因此,交换它们只会产生完全相同的RegEx和DFA,这似乎是相互矛盾的.
我做错了什么,或者这个RegEx应该没有真正的补充?
谢谢
假设正则表达式来自当前上下文之外的调用代码,然后传递给在当前项目之外实现的另一个调用:
["1", "2"].grep(/1/) #=> ["1"]
Run Code Online (Sandbox Code Playgroud)
在进行调用时,是否有一种简单的Ruby方式来实现以下行为?
["1", "2"].grep(/1/.negate) #=> ["2"]
Run Code Online (Sandbox Code Playgroud)
此行为类似于使用=~操作员切换操作!~员.它可以使用#select或#reject,当然,或者开辟或子类Regexp.但我很好奇Ruby中是否有一种方法可以用上述方式否定正则表达式返回的匹配.另外,我不关心比赛的位置是否false或者nil或者true或者是否与比赛的位置有关.
有一个理论问题是相关的,但超出了这里的简单考虑.
编辑:我得到迭代器是Ruby中过滤列表的一般方法,但是人们忽略了问题的限制.此外,我认为有关正则表达式被颠倒的方式有一些很好的功能.对于我来说,我不认为它过于紧张或过于聪明; 它是一种简单的面向对象编程,也是Ruby擅长的事情.