相关疑难解决方法(0)

Code Golf:正则表达式解析器

目标

今天的Code Golf挑战是尽可能少地创建一个正则表达式解析器.

语法

不,我不是要求你匹配Perl风格的正则表达式.毕竟,对于那些人来说,已经有一个非常可靠的翻译!:-)

以下是您需要了解的有关此挑战的正则表达式语法的所有信息:

  • 术语被定义为一个单一的文字字符,或分组括号内的正则表达式().
  • *(星号)字符表示Kleene星操作在上一届.这意味着前一个词的零个或多个连接在一起.
  • +(加)字符表示一个方便快捷方式:a+相当于aa*,这意味着一个或多个之前的术语的.
  • ?(问号)字符代表零或前项之一.
  • 所述|(管)字符代表的交替,也就是说,在任一侧上的正则表达式可以在比赛中使用.
  • 假设所有其他字符都是字面的.您可以假设所有其他角色都在其中[0-9A-Za-z](即所有英语字母数字).

或者,换一种说法:*/ +/ ?具有最高的优先级,然后串联,然后交替.由于交替的优先级低于连接,因此在没有括号的正则表达式中使用它会导致它被绑定到每一侧的完整正则表达式.*+?,在另一方面,将只适用于前一学期.

挑战

您的挑战是编写一个程序来编译或解释正则表达式(如上所定义),然后针对它测试一些字符串.

我要把输入留给你了.我的建议是,正则表达式可能应该首先出现,然后对任何数量的字符串进行测试; 但如果你想让它持久,那很好.如果你想把所有东西放在命令行参数或stdin,或命令行中的正则表达式和stdin中的字符串,或其他什么,那很好.只显示一两个用法示例.

输出应该是truefalse每行一个,以反映正则表达式是否匹配.

笔记:

  • 我不应该这样说......但是不要在你的语言中使用任何正则表达式库!您需要自己编译或解释模式.(编辑:如果需要拆分或连接字符串,可以使用正则表达式.您无法使用它直接解决问题,例如,将输入正则表达式转换为语言正则表达式并使用它.)
  • 正则表达式必须完全匹配此挑战的输入字符串.(等效地,如果您熟悉类似Perl的正则表达式,则假设所有匹配的字符串开始和结束都已到位)
  • 对于这个挑战,所有特殊字符()*+?|都不会按字面意思出现.如果输入中有一个,可以安全地假设没有模式可以匹配相关字符串.
  • 应以区分大小写的方式评估要测试的输入字符串.

例子

对于这些示例,我假设一切都是在命令行参数中完成的,首先是regex.(正如我上面所说,输入取决于你.)myregex这里代表你对程序的调用.

> myregex easy easy Easy hard
true
false
false

> myregex ab*a aa …
Run Code Online (Sandbox Code Playgroud)

regex language-agnostic code-golf rosetta-stone

53
推荐指数
6
解决办法
7872
查看次数