我想要一个正则表达式来查找子串bab的最多一次出现。 (在alphabeth {a,b}中)
这里我有一个正则表达式,用于在Alphabeth {a,b}
中查找bb(a+ba)* + (a+ba)*.b + (a+ba)*.bb.(a+ab)*
我想使用这个示例正则表达式,但然后使用bab作为子字符串。 如何扩展此正则表达式以查找子串bab的最多一次出现?
我是从这个开始的:
(b+ab)* + (b+ab)*b + (a+ba)* + (a+ba)*.b + (a+ba)*.bab.(a+ab)*
答案 0 :(得分:0)
如果我理解你的问题,你想要匹配的字符串最多只有一个" bab"如果有多个则不匹配。
我们可以使用负向前瞻:
https://regex101.com/r/QBe2bD/3
我使用了galabra发布的测试字符串作为起点。
注意:" babab
"火柴。如果你不想匹配它,你可以使用替代,但我把它留作练习。
提示:^(?!.*bab(.*bab|--)).*$
替换" - "有两个字符,可以让你不匹配babab。
答案 1 :(得分:0)
首先,我不得不说这比我想象的复杂得多,花了一些时间来解决。当然是一个很好的问题!
下图(使用draw.io制作)说明了下面的正则表达式:
蓝色圆圈表示可能的起点,红色圆圈表示字符串可以终止的位置。
关于正则表达式:
The following regex完全按照其编写的方式体现了图表:
^a*(b+(aa+)*)*bab((a(a+(b+)*)*)*|b+(aa*)*)$
其中this regex相同,但简化且排序良好:
^a*(?:b+(?:a{2,})*)*bab(?:(?:a(?:a+b*)*)*|b+a*)$