我会尝试使描述尽可能简单。
我被要求为正则表达式提供一个解决方案,只有 0 , 1
说0\*
匹配任何内容或任何只有 0 的字符串。
我有三个运营商.
,\*
,|
.
结合了两个正则表达式 r1 和 r1 , r1 匹配 s1 和 r2 匹配s2, s = s1 + s2
|
就像或者,结合r1,r2,r1匹配s1或r2匹配s2会使(r1|r2) matches s = s1 + s2
\*
只是明星案例,没有或更多逻辑。
所有运算符以及0和1都存储在二叉树中。
如需完整参考:http://www.cdf.toronto.edu/~heap/148/F13/Assignments/A2/a2.pdf
我正在尝试寻找一种递归解决方案。
将((1.(0|1)\*).0)
(任何字符串以 1 开头,以 0 结尾)匹配100101010
作为示例:
右侧的.
是正则表达式树的根,其左子1.(0|1)\*
和右子0,递归求解match('1.(0|1)\*', 10010101)
,为其右子0
},递归解决match('0', 0)
。
对于正确的孩子,它将返回true,
左侧部分继续递归步骤。
像
这样的东西def match(rx, s):
if rx == s:
// base case when s is 0 or 1
return True
else:
return False
x = 'some number'
s1 = s[:x]
s2 = s[x:]
if rx.operator == '.':
return match(rx.left, s1) and match(rx.right, s2)
elif rx.operator == '|':
return match(rx.left, s1) or match(rx.right, s2)
else:
return solveStar(rx, s)
我现在卡住了两部分,首先应该如何划分字符串以匹配子正则表达式,第二部分我很困惑解决星形*案例