1239: LOJ118 - 正则表达式
[Creator : ]
Description
给出一个非空的正则表达式和一个字符串,求该字符串是否能匹配该正则表达式。
这个正则表达式可能含有:
基本元素:
所有运算符都是左结合的,即同等优先级的运算顺序从左到右。
闭包和正闭包的优先级最高,连接次之,或的优先级最低。
这个正则表达式可能含有:
基本元素:
-
空串,输入中不体现;
-
单个小写字母(例如a),a匹配小写字母a,这里a表示小写字母a。
-
连接(例如ab),ab匹配可以表示成一个与a匹配的串与一个与b匹配的串相连接的串,这里a表示一个正则表达式,下同。
-
或(例如a|b),a|b匹配与a和b中至少一个匹配的串。
-
闭包(例如a*),a*匹配零个或多个与a匹配的串的连接。
-
正闭包(例如a+),a+匹配一个或多个与a匹配的串的连接。
-
括号(例如(a))
所有运算符都是左结合的,即同等优先级的运算顺序从左到右。
闭包和正闭包的优先级最高,连接次之,或的优先级最低。
Input
多组数据,每组数据两行:
第一行是一个非空正则表达式,保证符合上述定义,但可能出现多余括号。保证不出现空括号。
第二行是一个由小写字母组成的非空字符串。
第一行是一个非空正则表达式,保证符合上述定义,但可能出现多余括号。保证不出现空括号。
第二行是一个由小写字母组成的非空字符串。
Output
对于每组数据,如果正则表达式能匹配该字符串,输出一行 "Yes",否则输出一行 "No",不含引号。
Constraints
对于 $40\%$ 的数据,正则表达式仅由小写字母,$\text(*)$ 和 $\text(+)$ 组成。
对于 $100\%$ 的数据,每个正则表达式和字符串长度不超过 $100$。
对于 $100\%$ 的数据,每个正则表达式和字符串长度不超过 $100$。
Sample 1 Input
aa
a
a*
aa
a+
a
c*a*b
aab
ab*a
bbb
a(a|b+)*a
aa
a(a|b+)*a
aababba
a(a|cb+)*a
aca
a(a|cb+)*a
acbbbaacba
a(a|cb+)*a
acbbbaacb
((a*))
aa
Sample 1 Output
No
Yes
Yes
Yes
No
Yes
Yes
No
Yes
No
Yes