#P2003. ACSL 2015-2016 Junior Division Contest #4 ACSL Reg Exp

ACSL 2015-2016 Junior Division Contest #4 ACSL Reg Exp

题目描述

正则表达式与有限状态自动机(FSA)是 ACSL 的一个类别,但在初级组(Junior Division)中不进行测试。不过这里将其作为一道编程题使用,用来展示如何把一个长字符串或多个字符串用更精简的形式表示。正则表达式的概念最早由 Stephen Kleene 在 20 世纪 50 年代形式化。下面将使用以下运算:

运算符 含义与示例
?

表示其前面的元素出现 0 次或 1 次

例:colou?r 匹配 color 和 colour。

*

表示其前面的元素出现 0 次或多次

例:ab*c 匹配 ac、abc、abbc、abbbc 等。

+

表示其前面的元素出现 1 次或多次

例:ab+c 匹配 abc、abbc、abbbc 等,但不匹配 ac。

输入格式

将有 66 行输入。第一行包含 1010 个字符串。后 55 行每行包含一个合法的正则表达式字符串。每个正则表达式长度不超过 33 个字符,且运算符不超过两个。

输出格式

对于每个正则表达式,输出所有与其匹配的字符串;如果没有任何字符串匹配,则输出 NONE。这里用 # 表示空字符串。

输入输出样例

输入 #1

#, a, aa, aaa, ab, abb, aabb, aaab, abbb, b
a?b
a*b
a+b
a*b+
a?b+

输出 #1

ab, b
ab, aaab, b
ab, aaab
ab, abb, aabb, aaab, b, abbb
ab, abb, abbb, b