当前位置: 首页 > 知识库问答 >
问题:

不包含101的正则表达式

潘弘壮
2023-03-14

我发现正则表达式不包含101,如下所示:

0*1*0*(1 00 000)*(010*

我无法理解作者是如何想出这个正则表达式的。所以我只想到了不包含101的字符串:

01000100

我似乎上面的字符串不会与上面的正则表达式匹配。但我不确定。所以尝试在regex101.com上翻译成等效的pcre正则表达式,但也失败了(因为可以看到我的正则表达式甚至不匹配包含单个1的字符串。

我的翻译有什么问题?上面的正则表达式真的正确吗?如果不是,正确的正则表达式是什么?

共有3个答案

左丘成仁
2023-03-14

0* 1* ( (00 000)* 1*)* (ε 0)

我认为这个表达式涵盖了所有情况,因为除了1之外的任何数字都可以分解为成分2和3,即任何数字n=2*i3*j。因此,除了一个0之外,在两个连续的1之间可以有任意数量的0。因此,无法获得101。

ε0表示以1 0结尾的表达式。

壤驷骁
2023-03-14

阅读regex101右侧选项卡中的解释,它告诉您regex的功能(我认为您误解了list运算符的功能),在列表运算符([)中,其他字符(如将不再是元字符),因此表达式[(0*1*0*)[1(00)(000)]将等效于[01()*[]这意味着它匹配0或1或(或)或[

正则表达式0×1×0×(1 00 000)×(0 1 0)×的正确翻译如下:

^((?:0*1*0*)|(?:1|00|000)*|(?:0+1+0+)*)$

正则表达式101

Debuggex演示

你的正则表达式做什么

<代码>[(0*1*0*)[1(00)(000)]*-

<代码>(0 1 0)*--

所以你的表达式等价于

[([)01](0 1 0)*]它不是匹配不包含101的字符串的正则表达式

吴嘉禧
2023-03-14

这是一个略短的表达式

https://www.regex101.com/r/gG3wP5/1

解释:

  • 只要零在组中出现,我们就可以混合零和一
  • ^0*..0*$前缀/后缀中可以有任意多个零

原始正则表达式的直接翻译就像

^(0*1*0*|(1|00|000)*|(0+1+0+)*)$

更新这似乎是上述regexp的人为复杂版本:

  • (1 | 00 | 000)*(1 | 00)*
  • 我们仍然需要匹配0的0.10和0
  • e、 g.10010是并非所有情况下都匹配的最短字符串

因此,该解决方案过于复杂且不完整。

 类似资料:
  • 我需要一些“包含”和“不包含”的正则表达式。通常我会写: 包含:(.*WORD_A.*)$,不包含:(^((?!WORD_A.*)*)$ 如果单独使用,这很好,但我想写一些可以检测到的东西,比如“包含单词A和单词B”(顺序不相关!)和“包含单词A,但不包含单词B)。 基本上,我希望用户可以做出这样的声明“以单词a开头,包含单词B,但不是C和/或以D结尾”,程序返回真/假。最好的办法是只附加正则表达

  • 问题内容: 我有此RequestMapping: 我想添加该RequestMapping: 因此,它可以服务于所有“无出发”路线。但是,这会产生冲突,因为“ / route / to-destination-from-departure” URL实际上也与第二个RequestMapping匹配…很公平,所以我的解决方案是指定一个正则表达式: 因此,如果“目标”包含“ -from-”,则Reques

  • 我将一个regex模式列表传递给< code>grep来检查syslog文件。它们通常匹配IP地址和日志条目; 这只是一个模式列表,例如我正在循环传递的“1\.2\.部分,因此我无法传递“-v”。 我很困惑试图做上述的逆,不匹配线与某个IP地址和错误!1.2.3.4.*已爆炸”将匹配除1.2.3.4告诉我它已爆炸之外的任何syslog行。我必须能够包括一个IP地址不匹配。 在Stack Overf

  • 问题内容: 我知道可以匹配一个单词,然后使用其他工具(例如grep -v)将匹配项反转。但是,是否可以hede使用正则表达式来匹配不包含特定单词的行? 输入: 码: 所需的输出: 问题答案: 正则表达式不支持逆匹配的说法并不完全正确。您可以使用否定环顾模仿此行为: 上面的正则表达式将匹配任何不包含(sub)字符串’hede’的字符串或没有换行符的行。如前所述,这是不是正则表达式是“好”的(或应该做

  • 我在创建Django URL正则表达式时遇到问题,该正则表达式允许所有字符(包括正斜杠)。更具体地说,我遇到的问题是区分URL参数中使用的正斜杠和URL中用作分隔符的正斜杠。 例如: 我有一个URL,看起来像这样:localhost:8000/jfe/customer/customerNumb/invoice2/portfolio/ 这包括3个URL参数:customerNumb、invoice2

  • 问题内容: 我有一些复杂的正则表达式,为了便于阅读和维护,需要对其进行注释。Java规范相当简洁,为了使它正常工作,我努力了很长时间。我终于抓住了我的错误,并将其发布为答案,但对于保持正则表达式的任何其他建议,我将不胜感激 作为示例,我想在一个简单的名称解析器中注释(patternS的)子组件: 编辑:我也将感谢(?x)格式的示例。 编辑:@ geowa4有一个很好的建议,可以避免嵌入注释。自从J