2

快速提问 -

如何用 {x,y} 创建一种字符串语言,但用 (xy) 否定所有字符串?

我的尝试到目前为止:

\bx*[^(xy)]*y\b\by*[^(xy)]*x\b\b[^(xy)][xy]*[^(xy)]*\b

最后一个是最不受限制的,但在 [^(xy)] 的多次使用中显得笨拙。

完全否定包含(xy)但允许所有其他组合的字符串的最懒惰最方便的方法是什么?

谢谢

已编辑:允许的示例字符串:xxxxxxx yyyyyyyyy yxxxx yyyyyyxx

不允许的示例字符串:xxxxyxxx xyxxxx yyyyxyyy yyyxyxy 等

4

3 回答 3

3

如果我正确理解挑战,您描述的字符串语言可以以任意数量的 y 开头,后跟任意数量的 x,因为这些是唯一允许的两个字符,并且您不能将 ay 放在 x已经出现,因为这会导致字符串“xy”出现。

\by*x*\b

当然,我假设您实际上是在寻找一种更通用的解决方案来解决不像您给出的那样简单的案例。在这种情况下,否定的前瞻断言是最简单的解决方案。

于 2012-04-24T08:48:54.467 回答
1

使用负前瞻

\b((?!xy)[xy])+\b
于 2012-04-24T08:46:34.140 回答
0

尝试:

\bx[^xy\s]*y\b

解释:

<!--
\bx[^xy\s]*y\b

Options: ^ and $ match at line breaks

Assert position at a word boundary «\b»
Match the character “x” literally «x»
Match a single character NOT present in the list below «[^xy\s]*»
   Between zero and unlimited times, as many times as possible, giving back as needed (greedy) «*»
   One of the characters “xy” «xy»
   A whitespace character (spaces, tabs, and line breaks) «\s»
Match the character “y” literally «y»
Assert position at a word boundary «\b»
-->
于 2012-04-24T08:51:49.410 回答