快速提问 -
如何用{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 etc
答案 0 :(得分:3)
如果我正确地理解了挑战,那么你正在描述一种字符串语言,它可以以任意数量的y开头,后跟任意数量的x,因为这是允许的唯一两个字符,你不能放置一个一旦出现x,因为这会导致字符串“xy”出现。
\by*x*\b
当然,我认为您实际上正在寻找一种更通用的解决方案,用于不像您提供的那样简单的案例。在这种情况下,negative lookahead assertion是最简单的解决方案。
答案 1 :(得分:1)
使用否定前瞻
\b((?!xy)[xy])+\b
答案 2 :(得分: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»
-->