異なる種類のメタ正規表現ゴルフ


42

通知: 一般的な需要続いて、規則を少し緩和しました。

  • 最大正規表現サイズは、5回の回答ごとに 1バイト増加します。回答Nは、最大29 +⌈N/5⌉バイトを使用できます。
  • 各回答のスコアは(M /(30 + N / 5))Nになります

正規表現ゴルフでは、2セットの文字列が与えられ、最初のセットのすべての文字列に一致するが、2番目のセットのすべての文字列で失敗する最短の正規表現を作成するように求められます。

それが私たちがやろうとしていることですが、誰かが答えるたびに、正規表現自体が2つの文字列のセットの1つに追加されます(独自の選択)。したがって、この課題に答える厳密な順序があります。

例を見てみましょう:

  • 私はこれから始めますabc(私はそうしません)、そしてマッチセットに入れます。
  • 次に、有効な2番目の答えはになりますa。これは上記に一致するためです(失敗する必要のある文字列はまだありません)。この回答がフェールセットに含まれているとします。
  • ここで、3番目の答えは一致する必要abcがありますが失敗しaます。したがって、考えられる3番目の答えはですb。これをマッチセットに入れましょう。
  • 第四答えは今一致しているabcb、しかしに失敗しますa。重複する回答は許可しないため、有効な正規表現はですc|b

重要なのは、回答をできるだけ短くすることです。これは最初の数回の回答では些細なことかもしれませんが、少数の回答を取得すると、できるだけ少ない文字数で目的の一致を取得することがますます難しくなります。

実際のチャレンジでは、最初は一致セットにが含まれPPCG、失敗セットにはが含まれ[PPCG]ます。最初の回答は既に提供されています。

返事

この課題について理解する重要なことは、一度に答えることができるのは1人だけであり、それぞれの答えはその前のものに依存するということです。

同じもので2つの答えがあってはならないN。2人がN偶然に同時に答えた場合、後で答えた人は(たとえ数秒の差があっても)丁寧に答えを削除する必要があります。

これを少しスムーズに実行するには、回答を投稿する際に次の手順に従うようにしてください。

  • 誰かが前の回答の正しさを独立して検証したことを確認してください(そして対応するコメントを残しました)。
  • 前の回答で見つかった2つのテストセットを取得し、1つのセットのすべての文字列に一致し、もう1つのセットの文字列には一致しない正規表現を記述します。
  • 次の形式で回答を投稿してください。

    # 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つの回答を連続して送信することはできません。(たとえば、回答1を提出したので、回答2はできませんが、3はできます。)
  • 確認済みの回答は編集しないでください。(短縮する方法を見つけたとしても!)
  • チェーンの早い段階で(つまり、フォローアップの回答が投稿された後)間違いが発見され場合、問題のある回答は削除され、新しい投稿が失敗する文字列のセットから削除されます。ただし、それ以降に投稿されたすべての回答は、反映するために変更しないでください。
  • 正規表現が有効なフレーバーを1つ明記してください。オンラインで自由にテストできるフレーバーを選択できます。StackOverflowには、オンラインテスターの良いリストがあります。特に、Regex101RegexPlanetは、さまざまなフレーバーをサポートしているため有用です。選択したテスターへのリンクを回答に含めてください。テスターでglobalおよびmultiline修飾子をオンにすると、すべての文字列を一度に1行ずつテストできます(これらの修飾子は、個々の文字列には必要ないため、正規表現サイズにはカウントされません)。
  • 正規表現を空にすることはできません。
  • 回答Nの正規表現は、29 +⌈N/5⌉バイトを超えてはなりません。すなわち、回答1〜5は最大30バイト(包括的)、回答6〜10は最大31バイト使用できます...回答31〜35は最大36バイト使用できます。ダッシュボードで、次の回答で使用できる文字数を確認してください。
  • 正規表現は、どちらのテストセットの文字列とも同一であってはなりません。
  • 関連するホスト言語が区切り文字を使用している場合でも、サブミットまたはバイトカウントに区切り文字を含めないでください。正規表現が修飾子を使用する場合、修飾子ごとに1バイトを正規表現サイズに追加します。たとえば/foo/i、4バイトです。

得点

各回答のスコアは(M /(30 + N / 5))Nとして計算されます。ここで、Mは正規表現のサイズ(バイト単位)、Nは数値です。各ユーザーのスコアは、すべての回答の積です。総合スコアが最も低いユーザーが勝ちます。まれに同点の場合、最新の提出を持つユーザーが勝ちます。そのユーザーの最新の回答を受け入れます。

スコアの合計を希望する場合は、各回答のスコアをN *(log(M)-log(30))として計算し、すべての回答にわたってそれらを合計できます。それは同じリーダーボードの順序を与えます。

回答に回答のスコアを含める必要はありません。単にMを報告してください。質問の下部にあるチャレンジダッシュボードがスコアを計算し、2つの非常に近いスコアの場合、任意精度の型を使用して結果を再確認します。

各回答のスコアは1未満であるため、新しい回答を提供することで全体のスコアを改善できます。ただし、各提出物が短いほど、スコアをより効率的に下げることができます。さらに、指数が増加するため、後の回答はより長くなりますが、より低いスコアを達成できます。

ダッシュボード

ここでのオプティマイザーの作業に基づいて、スタックスニペットを使用して小さなダッシュボードツールを作成しました。これが、これらの回答依存の課題に何らかの秩序をもたらす助けになることを願っています。

これにより、チャレンジの現在のステータスが表示されます-特に、競合する回答がある場合、回答を検証する必要がある場合、または次の回答を投稿できる場合。

また、スコア付きのすべての回答のリストと、すべてのユーザーのリーダーボードも作成します。ダッシュボードが回答から関連する文字列を読み込めるように、上記のチャレンジ形式に固執してください。そうしないと、リーダーボードに含まれない可能性があります。

バグを見つけたり、ツールの有用性をどのように改善できるかについてのアイデアがある場合は、理想的にはチャットで)お知らせください。


ルールは、私が意図したよりも少し厳しいことが判明しました。チャットでいくつかの議論をした後、賞金がなくなった後、少し規則を緩和することを検討しています。以下で考えられるオプションについて、3つのコメントを投稿します。コメントに投票して、好みを示してください。
マーティンエンダー14年

2
ルールはルールです。それらを変更しないでください。別の回答を投稿することはほとんど不可能であるのは残念かもしれませんが、それはルールの変更を正当化するものではありません。
マーティンエンダー14年

2
10回答ごとに追加のバイトを許可します。同様に、回答スコアを(M /(30 + N / 10))^ Nに変更します。これは遡及的に適用されるため、次の回答では最大32バイトを使用できます。スコアの変更は、リーダーボードの上位2位には影響しませんが、他のユーザーは多少シャッフルされます。
マーティンエンダー14年

8
5回答ごとに追加のバイトを許可します。同様に、回答スコアを(M /(30 + N / 5))^ Nに変更します。これは遡及的に適用されるため、次の回答では最大35バイトを使用できます。スコアの変更は、リーダーボードの上位2位には影響しませんが、他のユーザーは多少シャッフルされます。
マーティンエンダー14年

4
あなたは奇妙でねじれています。なぜ自分でこれをするのですか?(ただし、読むのは楽しいです:P)
ジョー14年

回答:


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$

正当性が検証されました。
マーティンエンダー14年

私のプログラムは、45文字未満の回答を見つけるのに苦労しています...
Vi。

@Vi。まあ、少なくとも38のソリューションが存在すると言うことができますが、もちろん誰かがより低くなることができれば面白いでしょう:)
Sp3000 14

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\\

正当性が検証されました。
マーティンエンダー14年

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

8

10. Pythonフレーバー-19

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

Regex101でテスト済み。

次の答えは、次の文字列と一致する必要があります。

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

そして、これらの文字列で失敗します:

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

正当性が検証されました。
FryAmTheEggman 14年

8

8. ECMAScriptフレーバー-14バイト

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

デモ

次の答えは、次の文字列と一致する必要があります。

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

そして、これらの文字列で失敗します:

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

正当性が検証されました。
FryAmTheEggman 14年

デモリンクを修正しました。
マーティンエンダー

@FryAmTheEggmanスクリプトはコメントを読み取りますが、サブストリングとして「大文字と小文字の違いを無視して」「正当性検証済み」のみを検索します。
マーティンエンダー

@MartinBüttnerありがとう
FryAmTheEggman

3
このチャレンジを単独で10倍難しくした+1
Sp3000


7

9. Pythonフレーバー-28

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

Regex101でテスト済み

次の答えは、次の文字列と一致する必要があります。

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

そして、これらの文字列で失敗します:

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

また、これは1分前に​​は機能しないことがわかりました。一致するには2つのバックスラッシュが連続して必要なので、フラグで保存できないと思います。
feersum 14年

おっと...。+の代わりに*である必要があります。私は答えを編集しました
ndc5057 14年

正確さが確認されました。
FryAmTheEggman 14年

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

@feersumほとんどのフレーバーで]は、文字クラスの最初の要素(オプションの否定の後)は]、文字クラスの内部にあり、閉じません(空の文字クラスは少し意味がないため)。したがって、以外に[^]]一致し]ます。注目すべき例外は、空の文字クラスを許可するECMAScriptです。その場合[]、何も一致せず、任意の文字(?!)と同じように動作し、[^]一致します。これはECMAScriptにs修飾子がなく[\s\S]、読み取りを入力するのが面倒なので、便利です。
マーティンエンダー

正当性が検証されました。
マーティンエンダー

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 14年

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\\

正当性が検証されました。
マーティンエンダー14年

1
いいね!私が持っていたまさにだと、改造禁止する
SP3000

遺伝的アルゴリズムを使用してこれを計算しようとしていましたが、30文字の正規表現しか生成されませんでした。次の答えを得るために実行しています。現在の結果-32文字。
Vi。

@Vi遺伝的アルゴリズムええ、そこにある面白いアイデア:P
Sp3000 14年

@ Sp3000、現在30文字...しかし、別のアンカーが到着したため、再起動する必要があります。
Vi。

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|\\]*$

正当性が検証されました。
マーティンエンダー14年

Ahaha nice-以前の回答を人口の種として使用しましたか、それとも以前の回答のように見えましたか?
Sp3000 14年

合格した文字列と失敗した文字列は、最初の構成要素として使用されます。彼らは地元の最低価格のためにしばらくしてから禁止されました。プログラムログでどのように進行するかを確認できます。「metric =」の後の括弧内の数字は、今後の速度の指標です。それは長い間低く、現在の回答を禁止してリセットします。
Vi。

(一方、次の回答の31文字の候補はすでに見つかりました)
Vi。

ああ、制限が増えましたか?じゃない29?このように、それはすぐには終わりません...私は主な課題は最後の、究極の正規表現を見つけることです。
Vi。

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
正当性が検証されました。
マーティンエンダー14年

「失敗」リストに追加されるのはなぜですか?それ自体はすでに失敗しているので、変更せずに次の答えとして使用できます。各回答には、どのリストに追加するかを選択できないと思います。
Vi。

3
@Vi。私は今日HWNDの感覚の素敵を推測する
SP3000

進行し続けるので難しくします。
HWND

5

1. ECMAScriptフレーバー-2バイト

^P

Regex101でテストします。

最初の一致セットはでPPCGあり、失敗セットは[PPCG]です。したがって、この正規表現は、文字列始まることをテストするだけPです。

次の答えは、次の文字列と一致する必要があります。

PPCG
^P

そして、これらの文字列で失敗します:

[PPCG]

3
正当性が検証されました。
ベータ崩壊


5

7. Pythonフレーバー-16

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

Regex101でテスト済み

一致リストに\を追加する必要があります:)

次の答えは、次の文字列と一致する必要があります。

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

そして、これらの文字列で失敗します:

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

正当性が検証されました。
NinjaBearMonkey

これ…これは不正です。
wchargin

@WCharginありがとう:) user23013またはn̴̖̋h̷͉̃a̷̭̿h̸̡̅ẗ̵̨́d̷̰̀ĥ̷̳の回答の一部をチェックアウトする必要があります。一部はかなり「不正」です;)
FryAmTheEggman

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)$

正当性が検証されました。
マーティンエンダー

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は現在無効です。)
マーティンエンダー

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)$|~

正当性が検証されました。
マーティンエンダー

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 14年

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.\)

正当性が検証されました。
マーティンエンダー14年

あはは私はかなりイライラしています。前半でこれまで来た後、これを取得できませんでした:P
Sp3000 14年

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$]*\$$

正当性が検証されました。
Vi。

1
私は35を持っているが、私は、私はもっと面白いものを得ることができるかどうかを確認するつもりですので、私はそれに満足していないよ
SP3000

また、32文字の回答には3つのオプションがありますが、チャレンジ全体が少し退屈になりました(特にRegex101の提出と失敗/合格文字列のリストの記録)。誰かが望めば、答えを投稿できます。
Vi。


4

5. ECMAScriptフレーバー-6バイト

^[P^]P

Regex101でテスト済み。

成功セットで物事を少し盛り上げる時間です。

次の答えは、次の文字列と一致する必要があります。

PPCG
^P
^[P^]P

そして、これらの文字列で失敗します:

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

正当性が検証されました。
FryAmTheEggman 14年

4

6. ECMAScriptフレーバー-9バイト

[^?][PG]$

Regex101でテスト済み。

次の答えは、次の文字列と一致する必要があります。

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

そして、これらの文字列で失敗します:

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

1
正当性が検証されました。
ホタル14年

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)$

正当性が検証されました。
マーティンエンダー

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

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

正当性が検証されました。
jimmy23013

4

25. PCREフレーバー-29

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

ここでテストしました。(テスト正規表現には、\n複数の行にまたがる一致がないことを確認するための追加が含まれています。これは、個々の文字列を一致させる必要はありません。)

それは控えめな果物でした!:)しかし、この正規表現は現在のテストセットでは驚くほどエレガントです。この回答に賛成票を投じたい場合は、必ず前の回答にも賛成票を投じてください!

次の答えは、次の文字列と一致する必要があります。

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

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。

正当性が検証されました。(@Vi。、ダッシュボードはこの特定のフレーズを探します。)
マーティン・エンダー14年

私はそのフレーズを使うことについて考えましたが、自分のコメントを信頼できるものにしたいかどうかはわかりませんでした。
Vi。

前述の他の34文字の回答はここで機能するようです。4時間待つ(またはそのような)...
Vi。

ハッキングする必要はありません-コンピューターに委任します。StackExchange APIを使用して回答投稿ボットを作成することもできますか?..
Vi。

4

36. Pythonフレーバー-32

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

Regex101でテスト済み

私は3つの32バイトの正規表現を用意しましたが、幸いなことにそのうちの1つはまだ動作します: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
正当性が検証されました。
マーティンエンダー14年

Perl正規表現としての正当性も検証されます。
Vi。

投稿する30文字の保留中の回答があるので、質問が明日まで非アクティブであることを望みましょう。
Vi。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.