您的任务是创建一个程序,该程序使用来自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日@ UTC 3:30)
- 片段可以来自问题,答案或评论正文中的任何位置,无论它是否位于预格式化的代码块中。
- 将一个代码段拼接到另一个代码段的中间会导致外部代码段计为两个代码段
最低分获胜!
1
@RobinRyder是的,已更改
—
Beefster
职位是否可以早于或等于此挑战,即我们可以使用此挑战正文中的摘要吗?
—
乔·金
“这样,您将无法使用内置的正则表达式解析器”是说它的目的是为了通过简单的“是/否”来阻止它使用,还是在我们的答案中完全禁止使用正则表达式?
—
user0721090601 '19
@guifa经过专门设计,因此您不仅可以使用您语言的正则表达式引擎,还可以查看它是否编译给定的正则表达式。我所知道的每种语言都支持更大的元字符集和专门的捕获组,因此它们在所有情况下都无法正确匹配这组字符。
—
Beefster
@ JL2210这将使其成为两个摘要:一个开始,一个结束。您可以使用单个代码段,只要它通过所有测试用例并且来自比此挑战要早的答案/问题/帖子
—
Beefster