首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >不包含特定字符串的正则表达式

不包含特定字符串的正则表达式
EN

Stack Overflow用户
提问于 2009-04-04 19:22:39
回答 7查看 195.5K关注 0票数 83

我有这样的东西

aabbabcaabda

为了选择由包装的最小组,我有这个/a([^a]*)a/,它工作得很好

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

一般来说,有没有办法,怎么说不包含字符串,就像我用[^a]不包含字符一样

简单地说,我需要aa后跟除sequence aa之外的任何字符,然后以aa结束

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2009-04-04 19:30:55

通常,编写一个包含特定字符串的正则表达式而不是是一件很痛苦的事情。我们必须为计算模型做这件事--你得到一个NFA,它很容易定义,然后把它简化成一个正则表达式。不包含"cat“的东西的表达式大约有80个字符。

编辑:我刚刚完成,是的,它是:

代码语言:javascript
复制
aa([^a] | a[^a])aa

Here是一个非常简短的教程。我以前找到了一些很棒的,但我再也看不到它们了。

票数 19
EN

Stack Overflow用户

发布于 2010-03-05 21:39:51

通过谷歌的力量,我找到了a blogpost from 2007,它给出了下面的正则表达式,它匹配没有包含某个子字符串的字符串:

代码语言:javascript
复制
^((?!my string).)*$

它的工作方式如下:查找零个或多个(*)字符(.)它不会以字符串开头(?!-否定前视),并且它规定整个字符串必须由这样的字符组成(通过使用^和$锚点)。或者换一种说法:

整个字符串必须由不以给定字符串开头的字符组成,这意味着该字符串不包含给定子字符串。

票数 215
EN

Stack Overflow用户

发布于 2009-04-05 07:32:51

你所需要的只是一个不情愿的量词:

代码语言:javascript
复制
regex: /aa.*?aa/

aabbabcaabda   => aabbabcaa

aaaaaabda      => aaaa

aabbabcaabda   => aabbabcaa

aababaaaabdaa  => aababaa, aabdaa

你也可以使用负向先行,但在这种情况下,它只是一种更冗长的方式来完成同样的事情。而且,它比gpojd所描述的要稍微复杂一些。在允许点使用下一个字符之前,必须在每个位置应用先行查找。

代码语言:javascript
复制
/aa(?:(?!aa).)*aa/

至于克劳迪奥和finnw提出的方法,当前哨字符串只有两个字符时,它可以工作得很好,但(正如克劳迪奥承认的)对于更长的字符串来说,它太笨拙了。

票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/717644

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档