今天的Code Golf挑战是尽可能少地创建一个正则表达式解析器.
不,我不是要求你匹配Perl风格的正则表达式.毕竟,对于那些人来说,已经有一个非常可靠的翻译!:-)
以下是您需要了解的有关此挑战的正则表达式语法的所有信息:
().*(星号)字符表示Kleene星操作在上一届.这意味着前一个词的零个或多个连接在一起.+(加)字符表示一个方便快捷方式:a+相当于aa*,这意味着一个或多个之前的术语的.?(问号)字符代表零或前项之一.|(管)字符代表的交替,也就是说,在任一侧上的正则表达式可以在比赛中使用.[0-9A-Za-z](即所有英语字母数字).或者,换一种说法:*/ +/ ?具有最高的优先级,然后串联,然后交替.由于交替的优先级低于连接,因此在没有括号的正则表达式中使用它会导致它被绑定到每一侧的完整正则表达式.*和+和?,在另一方面,将只适用于前一学期.
您的挑战是编写一个程序来编译或解释正则表达式(如上所定义),然后针对它测试一些字符串.
我要把输入留给你了.我的建议是,正则表达式可能应该首先出现,然后对任何数量的字符串进行测试; 但如果你想让它持久,那很好.如果你想把所有东西放在命令行参数或stdin,或命令行中的正则表达式和stdin中的字符串,或其他什么,那很好.只显示一两个用法示例.
输出应该是true或false每行一个,以反映正则表达式是否匹配.
笔记:
()*+?|都不会按字面意思出现.如果输入中有一个,可以安全地假设没有模式可以匹配相关字符串.对于这些示例,我假设一切都是在命令行参数中完成的,首先是regex.(正如我上面所说,输入取决于你.)myregex这里代表你对程序的调用.
> myregex easy easy Easy hard
true
false
false
> myregex ab*a aa …Run Code Online (Sandbox Code Playgroud)