正则表达式匹配具有素数长度的字符串?

Ing*_*ion 0 regex pcre

给定一个输入字符串,其中包含任意数量的 'x' 个字符(x, xx, xxxxx,xxxxxxxxxxxxx等等),只有当输入字符串具有质数的 'x' 个字符时,如何才能编写与输入字符串匹配的正则表达式?不应匹配长度为 1 的字符串。

例如:

匹配这些: xx xxx xxxxx xxxxxxx

但不是这些: x xxxx xxxxxxxxx

这是我找到的一个解决方案 - ^(?!(xx+)\1+$)这里,作为这个问题的答案)。但是,我想知道它为什么有效。请分享任何替代解决方案。

我正在使用 PCRE 引擎。

我意识到人们通常不会将正则表达式用于此类事情。我只是对如何做到这一点很好奇。

Sam*_*Sam 6

^(?!(xx+)\1+$)
Run Code Online (Sandbox Code Playgroud)

通过在行首执行负前瞻来工作。它将拒绝任何包含以下内容的行

  • 2 个或更多xes
  • 后跟相同数量的xes,可能多次

换句话说,正则表达式的工作原理是匹配任意数量的xes,这些 es 不能分成大小 >= 2 的更小、大小相等的组。

要排除仅单个的情况x,您可以使用^(?!(xx+)\1+$|x$).