不包含某些字符串的正则表达式

我有这样的东西


阿布巴卡布达


选择一个包裹的最小组我有这个/a([^a]*)a/工作很好


但是我对用aa封装的组有问题,我需要像/aa([^aa]*)aa/这样的东西 行不通,而且我不能使用第一个像like的东西/aa([^a]*)aa/,因为它会在第一次出现a时结束,而我不想。


一般情况下,有没有什么办法,怎么说没有包含字符串以同样的方式,我可以说,不包含字符用[^a]?


简而言之,我需要a,然后是除序列aa之外的任何字符,然后以aa结尾


不负相思意
浏览 4464回答 3
3回答

慕慕森

通常,编写不包含特定字符串的正则表达式很麻烦。我们必须对计算模型执行此操作-您可以使用很容易定义的NFA,然后将其简化为正则表达式。不包含“ cat”的内容的表达式大约有80个字符。编辑:我刚刚完成,是的,它是:aa([^a] | a[^a])aa这是一个非常简短的教程。我之前找到了一些很棒的东西,但是我再也看不到它们了。

侃侃无极

您需要的只是一个勉强的量词:regex: /aa.*?aa/aabbabcaabda   => aabbabcaaaaaaaabda      => aaaaaabbabcaabda   => aabbabcaaaababaaaabdaa  => aababaa, aabdaa您也可以使用否定的前瞻,但是在这种情况下,这只是完成同一件事的一种更冗长的方式。而且,这比gpojd提出来的要复杂一些。在允许该点消耗下一个字符之前,必须在每个位置上应用前瞻。/aa(?:(?!aa).)*aa/至于Claudiu和finnw建议的方法,当前哨字符串只有两个字符长时,它可以正常工作,但是(如Claudiu所承认的那样)对于较长的字符串来说太笨拙了。
打开App,查看更多内容
随时随地看视频慕课网APP