为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

不负相思意 2019-11-27 11:04:27
我有这样的东西阿布巴卡布达选择一个包裹的最小组我有这个/a([^a]*)a/工作很好但是我对用aa封装的组有问题,我需要像/aa([^aa]*)aa/这样的东西 行不通,而且我不能使用第一个像like的东西/aa([^a]*)aa/,因为它会在第一次出现a时结束,而我不想。一般情况下,有没有什么办法,怎么说没有包含字符串以同样的方式,我可以说,不包含字符用[^a]?简而言之,我需要a,然后是除序列aa之外的任何字符,然后以aa结尾
查看完整描述

3 回答

?
慕慕森

TA贡献1856条经验 获得超17个赞

通常,编写不包含特定字符串的正则表达式很麻烦。我们必须对计算模型执行此操作-您可以使用很容易定义的NFA,然后将其简化为正则表达式。不包含“ cat”的内容的表达式大约有80个字符。


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


aa([^a] | a[^a])aa

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


查看完整回答
反对 回复 2019-11-27
?
侃侃无极

TA贡献2051条经验 获得超10个赞

您需要的只是一个勉强的量词:


regex: /aa.*?aa/


aabbabcaabda   => aabbabcaa


aaaaaabda      => aaaa


aabbabcaabda   => aabbabcaa


aababaaaabdaa  => aababaa, aabdaa

您也可以使用否定的前瞻,但是在这种情况下,这只是完成同一件事的一种更冗长的方式。而且,这比gpojd提出来的要复杂一些。在允许该点消耗下一个字符之前,必须在每个位置上应用前瞻。


/aa(?:(?!aa).)*aa/

至于Claudiu和finnw建议的方法,当前哨字符串只有两个字符长时,它可以正常工作,但是(如Claudiu所承认的那样)对于较长的字符串来说太笨拙了。


查看完整回答
反对 回复 2019-11-27
  • 3 回答
  • 0 关注
  • 4460 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信