我需要编写一个正则表达式规则,其中我所拥有的表达式没有递归规则。
例如,如果我需要写一个表达式,我可以有任意数量的a,b&s,c&s;和d' s但没有任何&# 39; s和d紧跟在任何一个b之后。但是,字符串和字母后面会出现在字符串中。
以下是我可以使用的所有规则:
试过这个:
(a|d)* (c|b)* c* (a|d)*
。但是,正如您所看到的,我需要不断重复才能使其发挥作用。任何帮助将不胜感激!
答案 0 :(得分:1)
你需要重新解释这个问题。
我可以拥有任意数量的a,b,s,c和d,但是没有任何一个和任何一个,并且d在b' S
换句话说,您可以(a|c|d)
任意次,但是时如果出现b
,那么任意数量的(b|c)
:所以, (a|c|d)* (b (b|c)*) | ɛ)
。
它正式等于(a|c|d)* (b|c)*
(您可能想弄清楚原因),但在实践中,尽管较短,但在使用常见的正则表达式算法进行评估时,这个会受到灾难性的失败。
(如果你想在计算/实际regexp上测试它,而不是理论上的,那么它会转换为[acd]*(?:b[bc]*)?
。)
(a|c|d|b+c)*(b|ɛ)
(?:[acd]|(?:b+c))*b?
在这里解释逻辑,你可以使用任何字母,但是如果你使用b
,你可以继续任意数量的b
但是当你厌倦了下一个需要时成为c
(如果您停止了b
,那么唯一剩下的就是a
或c
。然后它又回到了通常的程序。最后,您可以使用b
,但不一定会有任何内容。
答案 1 :(得分:1)