在单词中表达正则表达式

时间:2013-10-23 02:04:24

标签: regex

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

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

空格无意义,'+'表示'或'。我现在的回答是:

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

这是对的吗?如果是这样,我提出的最后一个条件让我有点疲惫。有没有办法可以简化求和?

谢谢你们。

2 个答案:

答案 0 :(得分:2)

嗯,不确定我同意@ChristianTernus的减少。

假设这些是隐式锚定的,原文(ab|b)*|(ba|b)*用英文表示:

  1. abb
  2. 组成的字符串完全
  3. bab组成的字符串完全
  4. 因此,例如,abb将匹配第一种但不匹配第二种,bba将匹配第二种但不匹配第一种。

    与此同时,请注意abbbba与减少量(ab)*|(ba)*|(b)*无关,实际上意味着,

    1. 由<{1}}或
    2. 组成的字符串完全
    3. 由<{1}}或
    4. 组成的字符串完全
    5. ab
    6. 组成的字符串完全

      实际上,你认识它的方式,我认为已经是最好的了!虽然,我的风格是这样的:

        

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

      几乎与你已写的相同。


      正如@ChristianTernus(和@slebetman)指出的那样,上面没有考虑到原始表达式接受一个空字符串(或者甚至是没有'a'的字符串,这在我的英语化中是不明确的),所以在事实上,我认为OP的英语化确实是最强的。

答案 1 :(得分:1)

  

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

转换为普通(PCRE)正则表达式,即

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

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

@ acheong87的回答也是正确的。我喜欢这个,因为它与正则表达式的原始结构更紧密地匹配 - 不难将它转回正则表达式的正则表达式。