正则表达式问题
Regular expresion problems
所以我必须为以下语言制作一个正则表达式来检查 (a|b|c)* 是否符合字符串不会以 "abc" 结尾的原则。
所以我制作了以下正则表达式:
((a|b|c)*((a|b)+|(a|c)+|b(b|c)+))
这是我的老师教我的,但是我在 https://regex101.com/ 上测试过
通过更多的研究,我了解到理论上它应该等同于以下正则表达式:
([abc]*([ab]+|[ac]+|b[bc]+))
但是该网站对我的正则表达式做了一些有趣的事情,我不知道如何使用它。
那么我的语言的正则表达式是什么?
我建议使用负向后回顾模式 (https://www.regular-expressions.info/lookaround.html#lookbehind) 来检查字符串是否不以某个序列结尾。
^(?:a|b|c)*(?<!abc)$
or
(?:a|b|c)*(?<!abc)
处理器查找由 abc
组成的文本,当它找到最大字符串时,它会检查末尾是否有 NOT "abc"
。如果是,它会丢弃最后一个字符并反复尝试,直到可以继续执行以下步骤。
查看示例 https://regex101.com/r/jBIjlu/1 and https://regex101.com/r/jBIjlu/2
这里是 Jan 回答的替代解决方案:
^(?:a(?!bc$)|b|c)*$
它使用前瞻而不是后视,它匹配包含零个或多个 "b"、零个或多个 "c"、零个或多个 "a" 的完整行,因为此 "a" 后不跟 "bc" 后跟行尾。
所以我必须为以下语言制作一个正则表达式来检查 (a|b|c)* 是否符合字符串不会以 "abc" 结尾的原则。 所以我制作了以下正则表达式:
((a|b|c)*((a|b)+|(a|c)+|b(b|c)+))
这是我的老师教我的,但是我在 https://regex101.com/ 上测试过 通过更多的研究,我了解到理论上它应该等同于以下正则表达式:
([abc]*([ab]+|[ac]+|b[bc]+))
但是该网站对我的正则表达式做了一些有趣的事情,我不知道如何使用它。 那么我的语言的正则表达式是什么?
我建议使用负向后回顾模式 (https://www.regular-expressions.info/lookaround.html#lookbehind) 来检查字符串是否不以某个序列结尾。
^(?:a|b|c)*(?<!abc)$
or
(?:a|b|c)*(?<!abc)
处理器查找由 abc
组成的文本,当它找到最大字符串时,它会检查末尾是否有 NOT "abc"
。如果是,它会丢弃最后一个字符并反复尝试,直到可以继续执行以下步骤。
查看示例 https://regex101.com/r/jBIjlu/1 and https://regex101.com/r/jBIjlu/2
这里是 Jan 回答的替代解决方案:
^(?:a(?!bc$)|b|c)*$
它使用前瞻而不是后视,它匹配包含零个或多个 "b"、零个或多个 "c"、零个或多个 "a" 的完整行,因为此 "a" 后不跟 "bc" 后跟行尾。