我有这样的东西
aabbabcaabda
为了选择由包装的最小组,我有这个/a([^a]*)a/
,它工作得很好
但我对aa包装的组有问题,我需要像/aa([^aa]*)aa/
这样的东西,但它不能工作,而且我不能使用第一个,比如/aa([^a]*)aa/
,因为它会在第一次出现a时结束,这是我不想要的。
一般来说,有没有办法,怎么说不包含字符串,就像我用[^a]
说不包含字符一样
简单地说,我需要aa后跟除sequence aa之外的任何字符,然后以aa结束
发布于 2009-04-04 19:30:55
通常,编写一个包含特定字符串的正则表达式而不是是一件很痛苦的事情。我们必须为计算模型做这件事--你得到一个NFA,它很容易定义,然后把它简化成一个正则表达式。不包含"cat“的东西的表达式大约有80个字符。
编辑:我刚刚完成,是的,它是:
aa([^a] | a[^a])aa
Here是一个非常简短的教程。我以前找到了一些很棒的,但我再也看不到它们了。
发布于 2010-03-05 21:39:51
通过谷歌的力量,我找到了a blogpost from 2007,它给出了下面的正则表达式,它匹配没有包含某个子字符串的字符串:
^((?!my string).)*$
它的工作方式如下:查找零个或多个(*)字符(.)它不会以字符串开头(?!-否定前视),并且它规定整个字符串必须由这样的字符组成(通过使用^和$锚点)。或者换一种说法:
整个字符串必须由不以给定字符串开头的字符组成,这意味着该字符串不包含给定子字符串。
发布于 2009-04-05 07:32:51
你所需要的只是一个不情愿的量词:
regex: /aa.*?aa/
aabbabcaabda => aabbabcaa
aaaaaabda => aaaa
aabbabcaabda => aabbabcaa
aababaaaabdaa => aababaa, aabdaa
你也可以使用负向先行,但在这种情况下,它只是一种更冗长的方式来完成同样的事情。而且,它比gpojd所描述的要稍微复杂一些。在允许点使用下一个字符之前,必须在每个位置应用先行查找。
/aa(?:(?!aa).)*aa/
至于克劳迪奥和finnw提出的方法,当前哨字符串只有两个字符时,它可以工作得很好,但(正如克劳迪奥承认的)对于更长的字符串来说,它太笨拙了。
https://stackoverflow.com/questions/717644
复制相似问题