あなたの仕事は、StackExchangeネットワーク上のサイトから供給されたコードスニペットを使用して、特定の文字列が有効な正規表現であるかどうかを決定するプログラムを作成することです。
この課題のために、正規表現の方言は取り除かれ、ほとんどの場合メタ文字の最小限のセットになります()*?|\
。そのため、組み込みの正規表現パーサーを使用することはできません。
\
メタ文字をエスケープするために使用されます。その後にメタ文字が必要です。- エスケープされていない括弧はバランスをとる必要があります
*
また、?
前に非メタ文字、括弧で囲まれたグループ、またはエスケープされたメタ文字のいずれかが必要です。- 他のすべての印刷可能なASCII文字と、改行、タブ、スペースは、非メタ文字としてサポートされている必要があります。他の文字を含む文字列で何が起こるかは未定義です。
- 正規表現の実際の意味は、この課題にとって重要ではありません。
例
Truthy:
abc
a?
(a|)*
()
a|b*
\*
\\
\\*
a*b?(cd|e)
+
[
}
(123\))*
\|
(a(b(c|d)*e)*f)*
(|\)*)
(abc)+*
(abc)+
+abc
^ last test case is an actual newline
Falsy:
?abc
*
**
\
(
a*?
a?*
?
a)
(\)
(|\)*
\()
|*
(?:abc)
\\**
\n
得点
総合スコアは、StackExchangeに関する質問と回答から取得したスニペットの数です。
- 繰り返しスニペットは、使用された回数だけカウントされます。
- 空白は自由に追加および削除でき(Python、Haskell、およびその他の空白に敏感な言語のため)、スニペット数にはカウントされません。
- 例外は、コードが実際にWhitespaceで記述されている場合です。
- この課題よりも古い質問、回答、コメント(編集時間を含む-必要に応じて古いリビジョンを使用)からのものである限り、任意のStackExchangeサイトからスニペットを使用できます。(2019年9月24日午後3時30分UTC)
- スニペットは、事前にフォーマットされたコードブロック内にあるかどうかに関係なく、質問、回答、またはコメント本文のどこからでも取得できます。
- スニペットを別のスニペットの中央に接合すると、外側のスニペットが2つのスニペットとしてカウントされます
最低スコアが勝ちます!
1
@RobinRyderはい、変更されました
—
Beefster
投稿はこのチャレンジと同じかそれよりも古いものにすることができますか?つまり、このチャレンジの本文からのスニペットを使用できますか?
—
ジョーキング
「そのため、組み込みの正規表現パーサーを使用することはできません」それは、単純なya / nayに対してそれを使用することを阻止するように設計されている、または私たちの回答で正規表現を使用することは一切禁止されていると言いますか?
—
user0721090601
@guifaこれは、言語の正規表現エンジンを使用して、指定された正規表現をコンパイルするかどうかを確認できないように設計されています。私が知っているすべての言語は、メタ文字と特殊なキャプチャグループのより大きなセットをサポートしているため、すべてのケースでこれらの文字のセットと正しく一致しません。
—
Beefster
@ JL2210これで2つのスニペットになります。1つは開始用、もう1つは終了用です。すべてのテストケースに合格し、このチャレンジよりも古い回答/質問/投稿からのものである限り、単一のスニペットを使用できます
—
Beefster