ReGex - 匹配逻辑含义

时间:2014-12-09 23:02:21

标签: regex

鉴于字母{a, b, c},如何创建一个简单的正则表达式,该表达式完全匹配符合以下条件的单词:

  • 如果出现字符串“aa”,那么也必须出现“cc”(注意逻辑含义)。
  • 出现顺序无关紧要(首先可以出现“cc”以及“aa”)。

由于前一个逻辑含义(if-then关系),即使没有“aa”,字符串“cc”也会出现,反之则不然。 我正在寻找一种方法来实现这一点,使用这些语法元素(., *, +, ?, |, )以及括号。

应该匹配的示例:

  • CC
  • ABBA
  • BCCB
  • bccaa
  • ε(epsilon - 空字符串)

不应该匹配的内容:

  • AA
  • aacbcb
  • abaaba
  • BAAA
  • CAAC

我尝试了以下内容:a?b?(ba)*(ccaa)*(aacc)*c*b?

1 个答案:

答案 0 :(得分:0)

不确定我是否应该回答这个,因为它的作业,但是这里......

首先,您要确定条款P:" string' aa'发生" 和Q:" string' cc'发生" 。然后,您将P -> Q转换为!P v Q。然后将其转换为由两部分组成的正则表达式:

^(((b|c)*(a(b|c)+)*a?)|(.*cc.*))$

第一部分否认任何' aa'如下所示:在开头允许任意数量的bc(包括无),如果找到a,则强制执行至少一个不同的字符它。 a后跟非a s可能会发生任意次。最后,我们还有a?允许字符串以a结尾,我们确定它之前没有a,因为前两个组中没有一个以{结尾}结尾{1}}。

第二部分是微不足道的。

在此测试:http://rubular.com/r/mAPHO8bulo
请在此处查看:http://jex.im/regulex/...