另一种Meta Regex高尔夫


42

注意: 遵循大众需求,我稍微放松了规则:

  • 正则表达式的最大大小每5个答案增加1个字节。答案N最多可以使用29 +⌈N/5⌉字节。
  • 每个答案的分数为(M /(30 + N / 5))N

在regex高尔夫中,您会得到两组字符串,并被要求创建最短的regex,该regex与第一组中的所有字符串匹配,但对第二组中的所有字符串都失败。

那就是我们要做的,但是每次有人回答时,他们的正则表达式本身都会被添加到两组字符串之一(由他们自己选择)中。因此,在这个挑战中有严格的答案顺序。

让我们来看一个例子:

  • 说我以abc(我不会)开始,然后将其放在比赛组合中。
  • 然后一个有效的第二个答案将是a,因为它与上述匹配(并且还没有需要失败的字符串)。说这个答案进入失败集。
  • 现在,第三个答案必须匹配,abc但失败了a。因此,可能的第三个答案是b。让我们将其放入匹配集中。
  • 第四答案现在有匹配abcb,但未能上a。我们将不允许重复的答案,因此有效的正则表达式为c|b

重要的是您的答案应尽可能简短。对于前几个答案来说,这可能是微不足道的,但是一旦我们得到了几个答案,就应该越来越难以尽可能少的字符来获得所需的匹配。

对于实际的挑战,匹配集最初包含PPCG,失败集包含[PPCG],我已经提供了第一个答案。

接听

了解这一挑战的关键在于,一次只能一个人回答,每个答案取决于之前的回答

决不应该有两个相同的答案N。如果两个人碰巧同时回答N了一个问题,则稍后回答的人(即使相差几秒钟)也应该宽容地删除他们的答案。

为了使此过程更流畅,请在发布答案时尝试遵循以下步骤:

  • 确保有人独立验证了先前答案的正确性(并留下了相应的评论)。
  • 取上一个答案中找到的两个测试集,并编写一个正则表达式,它匹配一组中的所有字符串,而另一组中的所有字符串都不匹配。
  • 以以下格式发布答案:

    # N. [regex flavour] - [regex size in bytes]
    
        [regex]
    
    [link to online regex tester]
    
    [notes, explanation, observations, whatever]
    
    ### The next answer has to match the following strings:
    
        [match set]
    
    ### And fail on these strings:
    
        [fail set]
    

    N您的答案在哪里。请复制[match set][fail set]从以前的答案,你的正则表达式追加到一个人。

    这对挑战绝对至关重要!我已经提供了一个仪表盘工具来应对这一挑战,以帮助进行簿记,并且它依赖于上述模板。(请参阅文章底部。)

  • 现在,如果您的回答遵循所有规则,则另一个用户应查看您的提交并留下“已验证正确性”的评论(请参见下文)。如果没有,他们应该留下评论指出任何缺陷。然后,您有15分钟的时间来解决这些问题。如果不是这样,您的答案将被视为无效,应将其删除,其他人可能会在前一个答案后发布后续答案。(如果发生这种情况,您可以随时随时提交新答案。)

这些规定看似相当严格,但它们对于避免链上某处的无效答案是必不可少的。

规则

  • 用户每4小时只能提交一个答案。(这是为了防止用户不断观察问题并尽可能回答。)
  • 用户不能连续提交两个答案。(例如,由于我提交了答案1,所以我不能回答2,但是我可以回答3。)
  • 不要编辑已验证的答案。(即使您找到一种缩短方法!)
  • 如果在链中较早时发现了错误(即在发布后续答案之后),则应删除有问题的答案,并将其从新提交失败的字符串集中删除。但是,此后已发布的所有答案都不应更改以反映出来。
  • 明确说明您的正则表达式有效的一种味道。您可以选择任何可以在线免费测试的味道。在StackOverflow上有很多在线测试人员。特别是Regex101RegexPlanet应该有用,因为它们支持多种口味。请包含指向您在答案中选择的测试仪的链接。通过在测试器中打开g小节和多m行修饰符,您可以一次测试所有字符串,每行一个(这些修饰符不计入您的正则表达式大小,因为任何单个字符串都不需要它们)。
  • 您的正则表达式不能为空。
  • 您的答案N的正则表达式不得超过29 +⌈N/5⌉字节。即答案1到5最多可以使用30个字节(含),答案6到10最多可以使用31个字节...答案31到35可以最多使用36个字节。检查仪表板,查看下一个答案可能使用多少个字符。
  • 您的正则表达式不得与任一测试集中的任何字符串相同。
  • 即使相关的宿主语言使用定界符,也不要在提交或字节数中包括定界符。如果您的正则表达式使用修饰符,则将每个修饰符添加一个字节到正则表达式大小。例如/foo/i为4个字节。

计分

每个答案的分数计算为(M /(30 + N / 5))N,其中M是正则表达式的大小(以字节为单位),N是数字。每个用户的分数是他们所有答案的乘积。总体得分最低的用户获胜。在平局的情况下,最新提交的用户将获胜。我将接受该用户的最新答案。

如果您希望对分数求和,则可以将每个答案的分数计算为N *(log(M)-log(30)),然后对所有答案求和。那将给出相同的排行榜顺序。

无需在答案中包含答案得分,只需报告M即可。问题底部的挑战仪表板将计算得分,如果得分非常接近,我将使用任意精度类型仔细检查结果。

请注意,每个答案的分数均小于1,因此您可以通过提供新答案来提高整体分数。但是,每个提交的时间越短,降低得分的效率就越高。此外,由于指数增加,以后的答案虽然会更长,但得分可能更低。

仪表板

我已经基于优化器在这里的工作,使用堆栈片段编写了一个小仪表板工具。我希望这将有助于我们对这些与答案相关的挑战有所了解。

这将显示挑战的当前状态-特别是,如果答案冲突,是否需要验证答案或是否可以发布下一个答案。

它还会生成一个包含分数的所有答案的列表,以及所有用户的排行榜。请遵循上面的挑战格式,以便仪表板可以从您的答案中读出相关的字符串。否则,您可能不会被列入排行榜。

如果您发现任何错误或对如何提高工具的实用性有任何想法,请让我知道(最好在聊天中)。


这些规则比我预期的要严格一些。在聊天中进行了一些讨论之后,我正在考虑在赏金用完后放松一些规则。我将在下面为我想到的选项发表3条评论。请通过对评论进行投票来表明您的偏好。
Martin Ender 2014年

2
规则就是规则。不要改变它们。可耻的是,发布另一个答案几乎是不可能的,但这并不能证明更改规则。
Martin Ender 2014年

2
10个答案有一个额外的字节。相应地,更改应答得分(M /(30 + N / 10))^ N。这将追溯应用,因此下一个答案最多可以使用32个字节。得分的变化不会影响排行榜的前两名,但其他用户会有所改组。
Martin Ender 2014年

8
5个答案有一个额外的字节。相应地,更改应答得分(M /(30 + N / 5))^ N。这将追溯应用,因此下一个答案最多可以使用35个字节。得分的变化不会影响排行榜的前两位,但其他用户会有所改组。
Martin Ender 2014年

4
你们真是奇怪又扭曲。你为什么要自己做?(虽然有趣:P)

Answers:


5

42.Python风格-38

\?[^w$]*\$$|^P|\w.\)|w.?\+|w\^|[^?P]P$

在Regex101上测试

最后几个答案中缺乏熵让我感到困惑...(应该早点做)

下一个答案必须匹配以下字符串:

PPCG
^P
^[P^]P
[^?][PG]$
(?<!\\..)(?!]).$
^[\w^]*$|!|]P|G]\$$
!|[^?]P(CG|G..)?$
[^])]\$|^\^?P|P.\].$
([.$?]|G\])\$$|^\^?P|\]P$
([P.$?]\$|[]^]P|G\]\$|CG)$
!|((G.|P|\.)\$|[^?]P|CG)$
^[(!P]|G..$|]..\||[^?]P$
^.{3,23}[.-~]..\$$|[^P?][PG]$
^..(.[!G)(3w^]|.{7}$|$)|\$\?
\.\)|P[.$?]|w\^|^[^|C\\]*$|^P
^..(.[!)3G^w]|$)|\^.{7}$|G\)
\?[^w$]*\$$|[]^C]\w+$|w\^|\|..\)
\w.\)|\?[^-$]*\$$|[]^C]\w$|w[+^]
[]^C]\w$|\w.\)|-\$|w[+^]|\?[^w$]*\$$

在这些字符串上失败:

[PPCG]
^[P\^]
[^\]]$
^\^?P
[^?][PG]$|<|PG
^[^\\|]*(\\\\)+[^\\|]*[^\]]$
^(.{,4}|.{9}|.{16,19}|.{5}P)$
^[^?]*[PG]$|[?$].*\$$
^[^[]P|]P|(G]|[.])\$$
\..$|!|\|G|^[\^P]P|P\^|G.\$$
...\^.P|^!|G]\$$|w|<!|^\^?P
([^\\}<]{3}|][^]]|^).?[$PG]$
^(..[^^].{4,22}\$|[^?]+\w)$|2
^(..[^^].{4,22}\$|[^?]+\w)$|~
^..(.[!()3G^w]|.{7}$|$)|G\\
[[?C(].[-!)|w]|^P|^[^C|\\]*$
[?[CP(].[-<)|w]|^P|^[^C|\\]*$
^..(.{7}$|.[3Gw!^)]|$)|G.?.?\)
^...[3w!G)]|^[^\\C|]*$|G.?.?\)
^[^C\\|]+$|G.\)|\.\)|w\^|^P|\...?]
^P|!.3|w\^|^[^C\\|]+$|\.[)$-](?!.!)
\?[^$w]*\$$|[]C^]\w$|w.]|\w.\)
\$..\\|\?[^w$]*\$$|w\^|[]^C]\w$
[]^C]\w$|\w.\)|w[[+^]|\?[^w$]*\$$
\?[^w$]*\$$|^P|\w.\)|w.?\+|w\^|[^?P]P$

正确性已验证。
马丁·恩德

我的程序很难找到少于45个字符的答案...
Vi。

@Vi。好吧,我可以说确实存在至少38个解决方案,但是如果有人设法降低水平,那当然很有趣:)
Sp3000 2014年

11

28. Python风格-29

\.\)|P[.$?]|w\^|^[^|C\\]*$|^P

在Regex101上测试

摆弄了很多摆弄-通行证组中的#4可能是最大的麻烦,因为它是失败组中正则表达式的子字符串,并且还与失败组中的另一个正则表达式共享后缀。

下一个答案必须匹配以下字符串:

PPCG
^P
^[P^]P
[^?][PG]$
(?<!\\..)(?!]).$
^[\w^]*$|!|]P|G]\$$
!|[^?]P(CG|G..)?$
[^])]\$|^\^?P|P.\].$
([.$?]|G\])\$$|^\^?P|\]P$
([P.$?]\$|[]^]P|G\]\$|CG)$
!|((G.|P|\.)\$|[^?]P|CG)$
^[(!P]|G..$|]..\||[^?]P$
^.{3,23}[.-~]..\$$|[^P?][PG]$
^..(.[!G)(3w^]|.{7}$|$)|\$\?
\.\)|P[.$?]|w\^|^[^|C\\]*$|^P

在这些字符串上失败:

[PPCG]
^[P\^]
[^\]]$
^\^?P
[^?][PG]$|<|PG
^[^\\|]*(\\\\)+[^\\|]*[^\]]$
^(.{,4}|.{9}|.{16,19}|.{5}P)$
^[^?]*[PG]$|[?$].*\$$
^[^[]P|]P|(G]|[.])\$$
\..$|!|\|G|^[\^P]P|P\^|G.\$$
...\^.P|^!|G]\$$|w|<!|^\^?P
([^\\}<]{3}|][^]]|^).?[$PG]$
^(..[^^].{4,22}\$|[^?]+\w)$|2
^(..[^^].{4,22}\$|[^?]+\w)$|~
^..(.[!()3G^w]|.{7}$|$)|G\\

正确性已验证。
Martin Ender 2014年

9

24-Python风格-29

^(..[^^].{4,22}\$|[^?]+\w)$|2

在这里测试

下一个答案必须匹配以下字符串:

PPCG
^P
^[P^]P
[^?][PG]$
(?<!\\..)(?!]).$
^[\w^]*$|!|]P|G]\$$
!|[^?]P(CG|G..)?$
[^])]\$|^\^?P|P.\].$
([.$?]|G\])\$$|^\^?P|\]P$
([P.$?]\$|[]^]P|G\]\$|CG)$
!|((G.|P|\.)\$|[^?]P|CG)$
^[(!P]|G..$|]..\||[^?]P$
^.{3,23}[.-~]..\$$|[^P?][PG]$

在这些字符串上失败:

[PPCG]
^[P\^]
[^\]]$
^\^?P
[^?][PG]$|<|PG
^[^\\|]*(\\\\)+[^\\|]*[^\]]$
^(.{,4}|.{9}|.{16,19}|.{5}P)$
^[^?]*[PG]$|[?$].*\$$
^[^[]P|]P|(G]|[.])\$$
\..$|!|\|G|^[\^P]P|P\^|G.\$$
...\^.P|^!|G]\$$|w|<!|^\^?P
([^\\}<]{3}|][^]]|^).?[$PG]$
^(..[^^].{4,22}\$|[^?]+\w)$|2

1
正确性已验证。
feersum 2014年

8

10. Python风格-19

^[\w^]*$|!|]P|G]\$$

Regex101上测试。

下一个答案必须匹配以下字符串:

PPCG
^P
^[P^]P
[^?][PG]$
(?<!\\..)(?!]).$
^[\w^]*$|!|]P|G]\$$

在这些字符串上失败:

[PPCG]
^[P\^]
[^\]]$
^\^?P
[^?][PG]$|<|PG
^[^\\|]*(\\\\)*[^\\|]*[^\]]$

正确性已验证。
FryAmTheEggman 2014年

8

8. ECMAScript风格-14个字节

[^?][PG]$|<|PG

演示版

下一个答案必须匹配以下字符串:

PPCG
^P
^[P^]P
[^?][PG]$
(?<!\\..)(?!]).$

在这些字符串上失败:

[PPCG]
^[P\^]
[^\]]$
^\^?P
[^?][PG]$|<|PG

正确性已验证。
FryAmTheEggman 2014年

修复了演示链接。
Martin Ender 2014年

@FryAmTheEggman脚本确实读取注释,但仅将“已验证正确性”作为字符串查找(忽略大小写)。
Martin Ender 2014年

@MartinBüttner谢谢,很高兴知道。
FryAmTheEggman 2014年

3
+1使这一挑战变得艰巨10倍
Sp3000


7

9. Python风格-28

^[^\\|]*(\\\\)*[^\\|]*[^\]]$

Regex101上测试

下一个答案必须匹配以下字符串:

PPCG
^P
^[P^]P
[^?][PG]$
(?<!\\..)(?!]).$

在这些字符串上失败:

[PPCG]
^[P\^]
[^\]]$
^\^?P
[^?][PG]$|<|PG
^[^\\|]*(\\\\)*[^\\|]*[^\]]$

一分钟前,我还发现这不起作用。它需要连续两个反斜杠才能匹配,所以我认为没有一个标志可以保存它。
feersum

糟糕...。应该是*而不是+。我编辑了答案
ndc5057

正确性已验证。
FryAmTheEggman 2014年

7

23. PCRE风味-28

([^\\}<]{3}|][^]]|^).?[$PG]$

在Regex101上测试。

下一个答案必须匹配以下字符串:

PPCG
^P
^[P^]P
[^?][PG]$
(?<!\\..)(?!]).$
^[\w^]*$|!|]P|G]\$$
!|[^?]P(CG|G..)?$
[^])]\$|^\^?P|P.\].$
([.$?]|G\])\$$|^\^?P|\]P$
([P.$?]\$|[]^]P|G\]\$|CG)$
!|((G.|P|\.)\$|[^?]P|CG)$
^[(!P]|G..$|]..\||[^?]P$
^.{3,23}[.-~]..\$$|[^P?][PG]$

在这些字符串上失败:

[PPCG]
^[P\^]
[^\]]$
^\^?P
[^?][PG]$|<|PG
^[^\\|]*(\\\\)+[^\\|]*[^\]]$
^(.{,4}|.{9}|.{16,19}|.{5}P)$
^[^?]*[PG]$|[?$].*\$$
^[^[]P|]P|(G]|[.])\$$
\..$|!|\|G|^[\^P]P|P\^|G.\$$
...\^.P|^!|G]\$$|w|<!|^\^?P
([^\\}<]{3}|][^]]|^).?[$PG]$

怎么[^]办?
feersum 2014年

@feersum在大多数情况下,a ]作为字符类的第一个元素(在可选的否定之后),只是]在字符类的内部而不会关闭(因为空字符类是毫无意义的)。因此[^]]匹配]。值得注意的例外是ECMAScript,它确实允许空字符类。在这种情况下,[]不匹配任何东西,它就像(?!)[^]任何字符,这是方便,因为ECMAScript中没有一个匹配的s修改,并且[\s\S]是键入读痛苦。
Martin Ender 2014年

正确性已验证。
Martin Ender 2014年

7

11. Python-29

^(.{,4}|.{9}|.{16,19}|.{5}P)$

►在RegexPlanet上测试

几乎所有无效答案的长度都与所有有效答案的长度不同。这个正则表达式利用了这一点。

下一个答案必须匹配以下字符串:

PPCG
^P
^[P^]P
[^?][PG]$
(?<!\\..)(?!]).$
^[\w^]*$|!|]P|G]\$$

在这些字符串上失败:

[PPCG]
^[P\^]
[^\]]$
^\^?P
[^?][PG]$|<|PG
^[^\\|]*(\\\\)+[^\\|]*[^\]]$
^(.{,4}|.{9}|.{16,19}|.{5}P)$

正确性已验证。
feersum 2014年

7

29. PCRE风味-28

^..(.[!)3G^w]|$)|\^.{7}$|G\)

在Regex101上测试

这个答案仍然有效...

下一个答案必须匹配以下字符串:

PPCG
^P
^[P^]P
[^?][PG]$
(?<!\\..)(?!]).$
^[\w^]*$|!|]P|G]\$$
!|[^?]P(CG|G..)?$
[^])]\$|^\^?P|P.\].$
([.$?]|G\])\$$|^\^?P|\]P$
([P.$?]\$|[]^]P|G\]\$|CG)$
!|((G.|P|\.)\$|[^?]P|CG)$
^[(!P]|G..$|]..\||[^?]P$
^.{3,23}[.-~]..\$$|[^P?][PG]$
^..(.[!G)(3w^]|.{7}$|$)|\$\?
\.\)|P[.$?]|w\^|^[^|C\\]*$|^P
^..(.[!)3G^w]|$)|\^.{7}$|G\)

在这些字符串上失败:

[PPCG]
^[P\^]
[^\]]$
^\^?P
[^?][PG]$|<|PG
^[^\\|]*(\\\\)+[^\\|]*[^\]]$
^(.{,4}|.{9}|.{16,19}|.{5}P)$
^[^?]*[PG]$|[?$].*\$$
^[^[]P|]P|(G]|[.])\$$
\..$|!|\|G|^[\^P]P|P\^|G.\$$
...\^.P|^!|G]\$$|w|<!|^\^?P
([^\\}<]{3}|][^]]|^).?[$PG]$
^(..[^^].{4,22}\$|[^?]+\w)$|2
^(..[^^].{4,22}\$|[^?]+\w)$|~
^..(.[!()3G^w]|.{7}$|$)|G\\

正确性已验证。
Martin Ender 2014年

1
真好!除非改组,这就是我所拥有的
Sp3000

我试图使用遗传算法来计算它,但是它只产生了30个字符的正则表达式...现在运行它来获得下一个答案。当前结果-32个字符。
六。

@Vi遗传算法,您那里有有趣的主意:P
Sp3000

@ Sp3000,现在有30个字符...但是另一个答案已经到来,因此需要重新启动。
六。

6

31.Perl风味-29

[?[CP(].[-<)|w]|^P|^[^C|\\]*$

我不知道它是如何工作的,它是我第一次尝试遗传算法时产生的。有程序输出提到答案。

下一个答案必须匹配:

PPCG
^P
^[P^]P
[^?][PG]$
(?<!\\..)(?!]).$
^[\w^]*$|!|]P|G]\$$
!|[^?]P(CG|G..)?$
[^])]\$|^\^?P|P.\].$
([.$?]|G\])\$$|^\^?P|\]P$
([P.$?]\$|[]^]P|G\]\$|CG)$
!|((G.|P|\.)\$|[^?]P|CG)$
^[(!P]|G..$|]..\||[^?]P$
^.{3,23}[.-~]..\$$|[^P?][PG]$
^..(.[!G)(3w^]|.{7}$|$)|\$\?
\.\)|P[.$?]|w\^|^[^|C\\]*$|^P
^..(.[!)3G^w]|$)|\^.{7}$|G\)

并失败:

[PPCG]
^[P\^]
[^\]]$
^\^?P
[^?][PG]$|<|PG
^[^\\|]*(\\\\)+[^\\|]*[^\]]$
^(.{,4}|.{9}|.{16,19}|.{5}P)$
^[^?]*[PG]$|[?$].*\$$
^[^[]P|]P|(G]|[.])\$$
\..$|!|\|G|^[\^P]P|P\^|G.\$$
...\^.P|^!|G]\$$|w|<!|^\^?P
([^\\}<]{3}|][^]]|^).?[$PG]$
^(..[^^].{4,22}\$|[^?]+\w)$|2
^(..[^^].{4,22}\$|[^?]+\w)$|~
^..(.[!()3G^w]|.{7}$|$)|G\\
[[?C(].[-!)|w]|^P|^[^C|\\]*$
[?[CP(].[-<)|w]|^P|^[^C|\\]*$

正确性已验证。
Martin Ender 2014年

啊哈哈,很好-您是使用先前的答案作为总体的种子,还是只是看起来像先前的答案一样?
Sp3000

传递和失败的字符串用作初始构建块。由于当地的最低要求,他们在一段时间后被禁止。您可以在程序日志中看到它的运行情况:“ metric =“之后的括号中的数字表示我们前进的速度。长期处于低位,我们禁止当前答案并重新设置。
六。

(同时,已经找到下一个答案的31个字符的候选者)
Vi。

哦,限额增加了吗?不是29吗 这样,它不会很快结束...尽管我面临的主要挑战是找到最后一个最终的正则表达式。
六。

6

32. PCRE — 30​​个字节

^..(.{7}$|.[3Gw!^)]|$)|G.?.?\)

Regex101上测试

下一个答案必须匹配以下字符串

PPCG
^P
^[P^]P
[^?][PG]$
(?<!\\..)(?!]).$
^[\w^]*$|!|]P|G]\$$
!|[^?]P(CG|G..)?$
[^])]\$|^\^?P|P.\].$
([.$?]|G\])\$$|^\^?P|\]P$
([P.$?]\$|[]^]P|G\]\$|CG)$
!|((G.|P|\.)\$|[^?]P|CG)$
^[(!P]|G..$|]..\||[^?]P$
^.{3,23}[.-~]..\$$|[^P?][PG]$
^..(.[!G)(3w^]|.{7}$|$)|\$\?
\.\)|P[.$?]|w\^|^[^|C\\]*$|^P
^..(.[!)3G^w]|$)|\^.{7}$|G\)

并在这些字符串上失败

[PPCG]
^[P\^]
[^\]]$
^\^?P
[^?][PG]$|<|PG
^[^\\|]*(\\\\)+[^\\|]*[^\]]$
^(.{,4}|.{9}|.{16,19}|.{5}P)$
^[^?]*[PG]$|[?$].*\$$
^[^[]P|]P|(G]|[.])\$$
\..$|!|\|G|^[\^P]P|P\^|G.\$$
...\^.P|^!|G]\$$|w|<!|^\^?P
([^\\}<]{3}|][^]]|^).?[$PG]$
^(..[^^].{4,22}\$|[^?]+\w)$|2
^(..[^^].{4,22}\$|[^?]+\w)$|~
^..(.[!()3G^w]|.{7}$|$)|G\\
[[?C(].[-!)|w]|^P|^[^C|\\]*$
[?[CP(].[-<)|w]|^P|^[^C|\\]*$
^..(.{7}$|.[3Gw!^)]|$)|G.?.?\)

1
正确性已验证。
Martin Ender 2014年

为什么将其添加到“失败”列表?它本身已经失败,因此可以直接使用而无需修改即可作为下一个答案。我想对于每个答案都没有选择要附加到哪个列表的选择。
六。

3
@Vi。我猜hwnd今天感觉很好
Sp3000 2014年

我会不断努力,让它变得更难。
HWND

5

1. ECMAScript风格-2个字节

^P

在Regex101上进行测试。

初始匹配集为PPCG和失败集[PPCG]。因此,这正则表达式只是简单地测试该字符串开头P

下一个答案必须匹配以下字符串:

PPCG
^P

在这些字符串上失败:

[PPCG]

3
正确性已验证。
Beta Decay

5

3. ECMAScript风格-6个字节

[^\]]$

在这里测试

下一个答案必须匹配以下字符串:

PPCG
^P

在这些字符串上失败:

[PPCG]
^[P\^]
[^\]]$

1
正确性已验证。
Beta Decay

5

7. Python风格-16

(?<!\\..)(?!]).$

Regex101上测试

一定要在匹配列表中添加\ :)

下一个答案必须匹配以下字符串:

PPCG
^P
^[P^]P
[^?][PG]$
(?<!\\..)(?!]).$

在这些字符串上失败:

[PPCG]
^[P\^]
[^\]]$
^\^?P

正确性已验证。
NinjaBearMonkey

这个……这是不可靠的。
wchargin 2014年

@WChargin谢谢:)您应该检查一些user23013或n̴̖̋h̷͉̃a̷̭̿h̸̡̅ẗ̵̨́d̷̰̀ĥ̷̳答案;有些非常“曲折”;)
FryAmTheEggman 2014年

5

12. ECMAScript风格-17

!|[^?]P(CG|G..)?$

在这里测试

下一个答案必须匹配以下字符串:

PPCG
^P
^[P^]P
[^?][PG]$
(?<!\\..)(?!]).$
^[\w^]*$|!|]P|G]\$$
!|[^?]P(CG|G..)?$

在这些字符串上失败:

[PPCG]
^[P\^]
[^\]]$
^\^?P
[^?][PG]$|<|PG
^[^\\|]*(\\\\)+[^\\|]*[^\]]$
^(.{,4}|.{9}|.{16,19}|.{5}P)$

正确性已验证。
Martin Ender 2014年

5

22. PCRE风味– 29个字节

由于原始的#22在1小时内未修改,因此我认为它已失效。

^.{3,23}[.-~]..\$$|[^P?][PG]$

演示版

下一个答案必须匹配以下字符串:

PPCG
^P
^[P^]P
[^?][PG]$
(?<!\\..)(?!]).$
^[\w^]*$|!|]P|G]\$$
!|[^?]P(CG|G..)?$
[^])]\$|^\^?P|P.\].$
([.$?]|G\])\$$|^\^?P|\]P$
([P.$?]\$|[]^]P|G\]\$|CG)$
!|((G.|P|\.)\$|[^?]P|CG)$
^[(!P]|G..$|]..\||[^?]P$
^.{3,23}[.-~]..\$$|[^P?][PG]$

在这些字符串上失败:

[PPCG]
^[P\^]
[^\]]$
^\^?P
[^?][PG]$|<|PG
^[^\\|]*(\\\\)+[^\\|]*[^\]]$
^(.{,4}|.{9}|.{16,19}|.{5}P)$
^[^?]*[PG]$|[?$].*\$$
^[^[]P|]P|(G]|[.])\$$
\..$|!|\|G|^[\^P]P|P\^|G.\$$
...\^.P|^!|G]\$$|w|<!|^\^?P

1
正确性已验证。(是的,没错,以前的22现在无效。)
Martin Ender 2014年

5

26. Python风格-28

^..(.[!G)(3w^]|.{7}$|$)|\$\?

在Regex101上测试

下一个答案必须匹配以下字符串:

PPCG
^P
^[P^]P
[^?][PG]$
(?<!\\..)(?!]).$
^[\w^]*$|!|]P|G]\$$
!|[^?]P(CG|G..)?$
[^])]\$|^\^?P|P.\].$
([.$?]|G\])\$$|^\^?P|\]P$
([P.$?]\$|[]^]P|G\]\$|CG)$
!|((G.|P|\.)\$|[^?]P|CG)$
^[(!P]|G..$|]..\||[^?]P$
^.{3,23}[.-~]..\$$|[^P?][PG]$
^..(.[!G)(3w^]|.{7}$|$)|\$\?

在这些字符串上失败:

[PPCG]
^[P\^]
[^\]]$
^\^?P
[^?][PG]$|<|PG
^[^\\|]*(\\\\)+[^\\|]*[^\]]$
^(.{,4}|.{9}|.{16,19}|.{5}P)$
^[^?]*[PG]$|[?$].*\$$
^[^[]P|]P|(G]|[.])\$$
\..$|!|\|G|^[\^P]P|P\^|G.\$$
...\^.P|^!|G]\$$|w|<!|^\^?P
([^\\}<]{3}|][^]]|^).?[$PG]$
^(..[^^].{4,22}\$|[^?]+\w)$|2
^(..[^^].{4,22}\$|[^?]+\w)$|~

正确性已验证。
Martin Ender 2014年

5

30.Python风格-28

[[?C(].[-!)|w]|^P|^[^C|\\]*$

在Regex101上测试

有意愿的时候

下一个答案必须匹配以下字符串:

PPCG
^P
^[P^]P
[^?][PG]$
(?<!\\..)(?!]).$
^[\w^]*$|!|]P|G]\$$
!|[^?]P(CG|G..)?$
[^])]\$|^\^?P|P.\].$
([.$?]|G\])\$$|^\^?P|\]P$
([P.$?]\$|[]^]P|G\]\$|CG)$
!|((G.|P|\.)\$|[^?]P|CG)$
^[(!P]|G..$|]..\||[^?]P$
^.{3,23}[.-~]..\$$|[^P?][PG]$
^..(.[!G)(3w^]|.{7}$|$)|\$\?
\.\)|P[.$?]|w\^|^[^|C\\]*$|^P
^..(.[!)3G^w]|$)|\^.{7}$|G\)

在这些字符串上失败:

[PPCG]
^[P\^]
[^\]]$
^\^?P
[^?][PG]$|<|PG
^[^\\|]*(\\\\)+[^\\|]*[^\]]$
^(.{,4}|.{9}|.{16,19}|.{5}P)$
^[^?]*[PG]$|[?$].*\$$
^[^[]P|]P|(G]|[.])\$$
\..$|!|\|G|^[\^P]P|P\^|G.\$$
...\^.P|^!|G]\$$|w|<!|^\^?P
([^\\}<]{3}|][^]]|^).?[$PG]$
^(..[^^].{4,22}\$|[^?]+\w)$|2
^(..[^^].{4,22}\$|[^?]+\w)$|~
^..(.[!()3G^w]|.{7}$|$)|G\\
[[?C(].[-!)|w]|^P|^[^C|\\]*$

正确性已验证。
jimmy23013

5

37.Perl风味-30

\?[^$w]*\$$|[]C^]\w$|w.]|\w.\)

关于Regex101的提交

该解决方案是通过与以前相同的程序生成的。该程序还打印了29个字符的解决方案\?[^$w]*\$|[]^C]\w)$|w.]|\w.\,我不知道为什么,因为它看起来像格式不正确的正则表达式...

下一个答案必须匹配以下字符串:

PPCG
^P
^[P^]P
[^?][PG]$
(?<!\\..)(?!]).$
^[\w^]*$|!|]P|G]\$$
!|[^?]P(CG|G..)?$
[^])]\$|^\^?P|P.\].$
([.$?]|G\])\$$|^\^?P|\]P$
([P.$?]\$|[]^]P|G\]\$|CG)$
!|((G.|P|\.)\$|[^?]P|CG)$
^[(!P]|G..$|]..\||[^?]P$
^.{3,23}[.-~]..\$$|[^P?][PG]$
^..(.[!G)(3w^]|.{7}$|$)|\$\?
\.\)|P[.$?]|w\^|^[^|C\\]*$|^P
^..(.[!)3G^w]|$)|\^.{7}$|G\)
\?[^w$]*\$$|[]^C]\w+$|w\^|\|..\)

在这些字符串上失败:

[PPCG]
^[P\^]
[^\]]$
^\^?P
[^?][PG]$|<|PG
^[^\\|]*(\\\\)+[^\\|]*[^\]]$
^(.{,4}|.{9}|.{16,19}|.{5}P)$
^[^?]*[PG]$|[?$].*\$$
^[^[]P|]P|(G]|[.])\$$
\..$|!|\|G|^[\^P]P|P\^|G.\$$
...\^.P|^!|G]\$$|w|<!|^\^?P
([^\\}<]{3}|][^]]|^).?[$PG]$
^(..[^^].{4,22}\$|[^?]+\w)$|2
^(..[^^].{4,22}\$|[^?]+\w)$|~
^..(.[!()3G^w]|.{7}$|$)|G\\
[[?C(].[-!)|w]|^P|^[^C|\\]*$
[?[CP(].[-<)|w]|^P|^[^C|\\]*$
^..(.{7}$|.[3Gw!^)]|$)|G.?.?\)
^...[3w!G)]|^[^\\C|]*$|G.?.?\)
^[^C\\|]+$|G.\)|\.\)|w\^|^P|\...?]
^P|!.3|w\^|^[^C\\|]+$|\.[)$-](?!.!)
\?[^$w]*\$$|[]C^]\w$|w.]|\w.\)

正确性已验证。
Martin Ender 2014年

啊哈哈,我很生气,上半场走得这么远后我没有得到这个:P
Sp3000

5

40. PCRE — 33字节

[]^C]\w$|\w.\)|w[[+^]|\?[^w$]*\$$

Regex101上测试

下一个答案必须匹配以下字符串

PPCG
^P
^[P^]P
[^?][PG]$
(?<!\\..)(?!]).$
^[\w^]*$|!|]P|G]\$$
!|[^?]P(CG|G..)?$
[^])]\$|^\^?P|P.\].$
([.$?]|G\])\$$|^\^?P|\]P$
([P.$?]\$|[]^]P|G\]\$|CG)$
!|((G.|P|\.)\$|[^?]P|CG)$
^[(!P]|G..$|]..\||[^?]P$
^.{3,23}[.-~]..\$$|[^P?][PG]$
^..(.[!G)(3w^]|.{7}$|$)|\$\?
\.\)|P[.$?]|w\^|^[^|C\\]*$|^P
^..(.[!)3G^w]|$)|\^.{7}$|G\)
\?[^w$]*\$$|[]^C]\w+$|w\^|\|..\)
\w.\)|\?[^-$]*\$$|[]^C]\w$|w[+^]

并在这些字符串上失败

[PPCG]
^[P\^]
[^\]]$
^\^?P
[^?][PG]$|<|PG
^[^\\|]*(\\\\)+[^\\|]*[^\]]$
^(.{,4}|.{9}|.{16,19}|.{5}P)$
^[^?]*[PG]$|[?$].*\$$
^[^[]P|]P|(G]|[.])\$$
\..$|!|\|G|^[\^P]P|P\^|G.\$$
...\^.P|^!|G]\$$|w|<!|^\^?P
([^\\}<]{3}|][^]]|^).?[$PG]$
^(..[^^].{4,22}\$|[^?]+\w)$|2
^(..[^^].{4,22}\$|[^?]+\w)$|~
^..(.[!()3G^w]|.{7}$|$)|G\\
[[?C(].[-!)|w]|^P|^[^C|\\]*$
[?[CP(].[-<)|w]|^P|^[^C|\\]*$
^..(.{7}$|.[3Gw!^)]|$)|G.?.?\)
^...[3w!G)]|^[^\\C|]*$|G.?.?\)
^[^C\\|]+$|G.\)|\.\)|w\^|^P|\...?]
^P|!.3|w\^|^[^C\\|]+$|\.[)$-](?!.!)
\?[^$w]*\$$|[]C^]\w$|w.]|\w.\)
\$..\\|\?[^w$]*\$$|w\^|[]^C]\w$
[]^C]\w$|\w.\)|w[[+^]|\?[^w$]*\$$

正确性已验证。
六。

1
我有35岁,但对它不满意,所以我将看一下是否还能得到一些更有趣的东西
Sp3000

我有3个选项,可以回答32个字符,但是整个挑战有点无聊(特别是对Regex101提交的簿记和失败/通过字符串列表)。如果有人愿意,我可以发布答案。
六。

4

4. ECMAScript风格-5个字节

^\^?P

在这里测试

下一个答案必须匹配以下字符串:

PPCG
^P

在这些字符串上失败:

[PPCG]
^[P\^]
[^\]]$
^\^?P

1
正确性已验证。
Beta Decay

4

5. ECMAScript风格-6个字节

^[P^]P

Regex101上测试。

是时候为成功做好准备了。

下一个答案必须匹配以下字符串:

PPCG
^P
^[P^]P

在这些字符串上失败:

[PPCG]
^[P\^]
[^\]]$
^\^?P

正确性已验证。
FryAmTheEggman 2014年

4

6. ECMAScript风格-9个字节

[^?][PG]$

Regex101上测试。

下一个答案必须匹配以下字符串:

PPCG
^P
^[P^]P
[^?][PG]$

在这些字符串上失败:

[PPCG]
^[P\^]
[^\]]$
^\^?P

1
正确性已验证。
FireFly 2014年

4

14. PCRE风味-25

([.$?]|G\])\$$|^\^?P|\]P$

Regex101上测试

这开始变得相当困难。

下一个答案必须匹配以下字符串:

PPCG
^P
^[P^]P
[^?][PG]$
(?<!\\..)(?!]).$
^[\w^]*$|!|]P|G]\$$
!|[^?]P(CG|G..)?$
[^])]\$|^\^?P|P.\].$
([.$?]|G\])\$$|^\^?P|\]P$

在这些字符串上失败:

[PPCG]
^[P\^]
[^\]]$
^\^?P
[^?][PG]$|<|PG
^[^\\|]*(\\\\)+[^\\|]*[^\]]$
^(.{,4}|.{9}|.{16,19}|.{5}P)$

正确性已验证。
Martin Ender

4

15. PCRE风味-26

([P.$?]\$|[]^]P|G\]\$|CG)$

Regex101上测试

下一个答案必须匹配以下字符串:

PPCG
^P
^[P^]P
[^?][PG]$
(?<!\\..)(?!]).$
^[\w^]*$|!|]P|G]\$$
!|[^?]P(CG|G..)?$
[^])]\$|^\^?P|P.\].$
([.$?]|G\])\$$|^\^?P|\]P$
([P.$?]\$|[]^]P|G\]\$|CG)$

在这些字符串上失败:

[PPCG]
^[P\^]
[^\]]$
^\^?P
[^?][PG]$|<|PG
^[^\\|]*(\\\\)+[^\\|]*[^\]]$
^(.{,4}|.{9}|.{16,19}|.{5}P)$

1
正确性已验证。
FireFly 2014年

4

16. PCRE风味-21

^[^?]*[PG]$|[?$].*\$$

Regex 101上测试。

下一个答案必须匹配以下字符串:

PPCG
^P
^[P^]P
[^?][PG]$
(?<!\\..)(?!]).$
^[\w^]*$|!|]P|G]\$$
!|[^?]P(CG|G..)?$
[^])]\$|^\^?P|P.\].$
([.$?]|G\])\$$|^\^?P|\]P$
([P.$?]\$|[]^]P|G\]\$|CG)$

在这些字符串上失败:

[PPCG]
^[P\^]
[^\]]$
^\^?P
[^?][PG]$|<|PG
^[^\\|]*(\\\\)+[^\\|]*[^\]]$
^(.{,4}|.{9}|.{16,19}|.{5}P)$
^[^?]*[PG]$|[?$].*\$$

不匹配PPCG
jimmy23013

@ user23013已修复
es1024 2014年

正确性已验证。
jimmy23013

4

25.PCRE风味-29

^(..[^^].{4,22}\$|[^?]+\w)$|~

在这里测试。(测试正则表达式包含一个附加项\n,以确保没有匹配项跨越多行。这不必匹配每个单独的字符串。)

那是低挂的果实!:)我必须祝贺Plannapus,对于当前的测试集,此正则表达式非常优雅。如果您想赞成这个答案,请确保也赞成上一个!

下一个答案必须匹配以下字符串:

PPCG
^P
^[P^]P
[^?][PG]$
(?<!\\..)(?!]).$
^[\w^]*$|!|]P|G]\$$
!|[^?]P(CG|G..)?$
[^])]\$|^\^?P|P.\].$
([.$?]|G\])\$$|^\^?P|\]P$
([P.$?]\$|[]^]P|G\]\$|CG)$
!|((G.|P|\.)\$|[^?]P|CG)$
^[(!P]|G..$|]..\||[^?]P$
^.{3,23}[.-~]..\$$|[^P?][PG]$

在这些字符串上失败:

[PPCG]
^[P\^]
[^\]]$
^\^?P
[^?][PG]$|<|PG
^[^\\|]*(\\\\)+[^\\|]*[^\]]$
^(.{,4}|.{9}|.{16,19}|.{5}P)$
^[^?]*[PG]$|[?$].*\$$
^[^[]P|]P|(G]|[.])\$$
\..$|!|\|G|^[\^P]P|P\^|G.\$$
...\^.P|^!|G]\$$|w|<!|^\^?P
([^\\}<]{3}|][^]]|^).?[$PG]$
^(..[^^].{4,22}\$|[^?]+\w)$|2
^(..[^^].{4,22}\$|[^?]+\w)$|~

1
正确性已验证。
feersum 2014年

4

35. PCRE — 35个字节

^P|!.3|w\^|^[^C\\|]+$|\.[)$-](?!.!)

Regex101上测试

下一个答案必须匹配以下字符串

PPCG
^P
^[P^]P
[^?][PG]$
(?<!\\..)(?!]).$
^[\w^]*$|!|]P|G]\$$
!|[^?]P(CG|G..)?$
[^])]\$|^\^?P|P.\].$
([.$?]|G\])\$$|^\^?P|\]P$
([P.$?]\$|[]^]P|G\]\$|CG)$
!|((G.|P|\.)\$|[^?]P|CG)$
^[(!P]|G..$|]..\||[^?]P$
^.{3,23}[.-~]..\$$|[^P?][PG]$
^..(.[!G)(3w^]|.{7}$|$)|\$\?
\.\)|P[.$?]|w\^|^[^|C\\]*$|^P
^..(.[!)3G^w]|$)|\^.{7}$|G\)

并在这些字符串上失败

[PPCG]
^[P\^]
[^\]]$
^\^?P
[^?][PG]$|<|PG
^[^\\|]*(\\\\)+[^\\|]*[^\]]$
^(.{,4}|.{9}|.{16,19}|.{5}P)$
^[^?]*[PG]$|[?$].*\$$
^[^[]P|]P|(G]|[.])\$$
\..$|!|\|G|^[\^P]P|P\^|G.\$$
...\^.P|^!|G]\$$|w|<!|^\^?P
([^\\}<]{3}|][^]]|^).?[$PG]$
^(..[^^].{4,22}\$|[^?]+\w)$|2
^(..[^^].{4,22}\$|[^?]+\w)$|~
^..(.[!()3G^w]|.{7}$|$)|G\\
[[?C(].[-!)|w]|^P|^[^C|\\]*$
[?[CP(].[-<)|w]|^P|^[^C|\\]*$
^..(.{7}$|.[3Gw!^)]|$)|G.?.?\)
^...[3w!G)]|^[^\\C|]*$|G.?.?\)
^[^C\\|]+$|G.\)|\.\)|w\^|^P|\...?]
^P|!.3|w\^|^[^C\\|]+$|\.[)$-](?!.!)

我的验证程序未显示任何错误。
六。

正确性已验证。(@Vi。,仪表板将查找此特定短语。)
Martin Ender 2014年

我虽然打算使用该短语,但不确定是否要使我的评论具有权威性。
六。

我之前提到的其他34个字符的答案似乎在这里有用。等待4个小时(或类似时间)...
Vi。

我不会打扰-我将其委托给计算机。也许使用StackExchange API写一个答案张贴BOT ..?
六。

4

36.Python风格-32

\?[^w$]*\$$|[]^C]\w+$|w\^|\|..\)

在Regex101上测试

我准备好了三个32字节的正则表达式,幸运的是其中一个仍然可以使用:D

下一个答案必须匹配以下字符串:

PPCG
^P
^[P^]P
[^?][PG]$
(?<!\\..)(?!]).$
^[\w^]*$|!|]P|G]\$$
!|[^?]P(CG|G..)?$
[^])]\$|^\^?P|P.\].$
([.$?]|G\])\$$|^\^?P|\]P$
([P.$?]\$|[]^]P|G\]\$|CG)$
!|((G.|P|\.)\$|[^?]P|CG)$
^[(!P]|G..$|]..\||[^?]P$
^.{3,23}[.-~]..\$$|[^P?][PG]$
^..(.[!G)(3w^]|.{7}$|$)|\$\?
\.\)|P[.$?]|w\^|^[^|C\\]*$|^P
^..(.[!)3G^w]|$)|\^.{7}$|G\)
\?[^w$]*\$$|[]^C]\w+$|w\^|\|..\)

在这些字符串上失败:

[PPCG]
^[P\^]
[^\]]$
^\^?P
[^?][PG]$|<|PG
^[^\\|]*(\\\\)+[^\\|]*[^\]]$
^(.{,4}|.{9}|.{16,19}|.{5}P)$
^[^?]*[PG]$|[?$].*\$$
^[^[]P|]P|(G]|[.])\$$
\..$|!|\|G|^[\^P]P|P\^|G.\$$
...\^.P|^!|G]\$$|w|<!|^\^?P
([^\\}<]{3}|][^]]|^).?[$PG]$
^(..[^^].{4,22}\$|[^?]+\w)$|2
^(..[^^].{4,22}\$|[^?]+\w)$|~
^..(.[!()3G^w]|.{7}$|$)|G\\
[[?C(].[-!)|w]|^P|^[^C|\\]*$
[?[CP(].[-<)|w]|^P|^[^C|\\]*$
^..(.{7}$|.[3Gw!^)]|$)|G.?.?\)
^...[3w!G)]|^[^\\C|]*$|G.?.?\)
^[^C\\|]+$|G.\)|\.\)|w\^|^P|\...?]
^P|!.3|w\^|^[^C\\|]+$|\.[)$-](?!.!)

1
正确性已验证。
马丁·恩德

作为Perl正则表达式的正确性也得到了验证。
六。

希望这个问题在明天之前不再有效,因为我有30个字符的待定答案。
六。
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.