Regex 用词表示正则表达式

Regex 用词表示正则表达式,regex,Regex,我试图用文字表达下面的正则表达式。请不要这样,这不是一个编程正则表达式,与我正在做的一些CS工作相反。正则表达式是: (ab + b)* + (ba + b)* 空格没有意义,“+”用作“或”。我现在的答案是: 此正则表达式表示每个不包含子字符串“aa”的字符串,如果第一个字母是“a”,则最后一个字母是“b” 这是正确的吗?如果是这样的话,我提出的最后一个条件让我有点厌倦。有没有办法简化求和 谢谢各位 (ab+b)*+(ba+b)* 翻译成通用(PCRE)正则表达式,就是 (ab|b)*(ba

我试图用文字表达下面的正则表达式。请不要这样,这不是一个编程正则表达式,与我正在做的一些CS工作相反。正则表达式是:

(ab + b)* + (ba + b)*
空格没有意义,“+”用作“或”。我现在的答案是:

此正则表达式表示每个不包含子字符串“aa”的字符串,如果第一个字母是“a”,则最后一个字母是“b”

这是正确的吗?如果是这样的话,我提出的最后一个条件让我有点厌倦。有没有办法简化求和

谢谢各位

(ab+b)*+(ba+b)*

翻译成通用(PCRE)正则表达式,就是

(ab|b)*(ba|b)*

换句话说:由零个或多个“ab”或“b”实例组成的字符串,或由零个或多个“ba”或“b”实例组成的字符串。


@阿公87的回答也是正确的。我喜欢这个,因为它更接近正则表达式的原始结构——将它转换回它的原始正则表达式并不困难。

Hm,我不确定是否同意@ChristianTernus的简化

假设这些都是隐式锚定的,那么英文原版,
(ab | b)*|(ba | b)*
是:

  • 完全由
    ab
    b
    组成的字符串,或
  • 完全由
    ba
    b
    组成的字符串
  • 因此,例如,
    abb
    将匹配第一类,但不匹配第二类,
    bba
    将匹配第二类,但不匹配第一类

    同时,请注意
    abb
    bba
    如何与减少量匹配,
    (ab)*|(ba)*|(b)*
    ,这实际上意味着

  • 完全由
    ab
    组成的字符串,或
  • 完全由
    ba
    组成的字符串,或
  • 完全由
    b
    组成的字符串

  • 事实上,你英语化的方式,我认为已经是最好的了!尽管如此,我还是喜欢这样的风格:

    此正则表达式表示完全由“a”和“b”组成的字符串,没有连续的“a”,如果第一个字符是“a”,则其最后一个字符是“b”

    和你已经写的差不多



    正如@ChristianTernus(和@slebetman)所指出的,上面没有考虑到原始表达式接受空字符串(甚至是没有“a”的字符串,这在我的英语分类中并不清楚),因此事实上我相信OP的英语分类确实是最强的。

    “加”作为“或”起作用。”这不是一个正则表达式,它的功能是逻辑or。我正在读的CS书籍使用了“+”符号。不确定它怎么不是正则表达式。例如,如果正则表达式是:“(a+b)”,整个语言就是{'a',b'}。这个正则表达式匹配一个空字符串、字符串的重复
    ab
    、字符串的重复
    b
    和字符串的重复
    ba
    。顺便说一句,当你的CS书籍使用短语“正则表达式”时它的意思可能是“正则语法中的表达式”。99.9%的情况下,当有人使用“正则表达式”或“正则表达式”时,他们指的是。嗯,我的印象是,在阅读这个正则表达式时,or表示其中一个或另一个。所以我们要么选择(ab | b)*要么选择(ba | b)*。那么我们只能从一个重复。举个例子,字符串“abba”不在语言中,但在你的简化下,它是。哦,我明白你的意思了,但是。。。*符号不允许您在OR之间再次选择吗?例如,(a | b)*可以包含字符串“ab”。谢谢你的快速回复。我同意。我也从他的推论中注意到了这一点。我相信我的英语分类(呵呵)现在也正确了。我希望得到确认,看看是否有可能减少。我不同意。在一个地方你假设+是包含或的,而在另一个地方你假设+是独占或的。你知道吗,再做一些分析,你是对的,我是错的。:)不过,我还是要换一种说法:您的Englishification与空字符串不匹配,而原始正则表达式会匹配。请注意,零或多个限定符基本上意味着,从学究的角度来看,空字符串也会匹配。@slebetman,这可能看起来很学究,但当你想知道为什么你的正则表达式会出现比你想象的更多的匹配时,这很重要:)