两个带通配符的字符串,判断包含关系
通配符只有*和?,*代表任意个任意字符,?代表单个任意字符
两个字符串都可能包含以上两个通配符,判断两个字符串是否相等,或具有包含、被包含的关系
例如:
* 包含 任何字符串
abc * abc 包含 abc ?123? abc
我尝试用正则表达式来解决,但某些情况可能导致误判。
不知有没有算法或者现成的库可以使用
[解决办法]
abc * abc d
与
abc ?123? abc ?
的关系是啥
[解决办法]
相等就不用说了
包含与被包含也是同一个问题的两种形态
不失一般性
讨论 A 是否包含 B
把 A 以 '*' 切割成字符串数组
如果这个数组顺序的包含于 B 中 即 A 包含 B
当然这个A切割成的字符串数组中可能会包含 '?' 字符
如果都是'?'代表字母或数字的话 大不了生成对应的 36 个新字符串去匹配
用贪心的思想 尽量让匹配的位置最靠近上一个字符串匹配的位置
如果'?'也匹配汉字等其他字符 就把这个字符串再次切割与B中匹配让匹配的位置中只隔一个字符即可
[解决办法]
?代表一个字符么
[解决办法]
假定*代表任意长度字符,?代表任意一个字符,貌似可以用类似递推的方式来做。
f(i,j) = {true,false}表示两个字符串前面长度分别为i,j能否匹配
然后按字符是*,?,或者普通字母之类的分情况讨论,由已经解决的问题推出。
[解决办法]
楼主的问题是不可判定的,即:不存在这样的程序P,在输入两个正则语法 A 和B,给出下列判定结果:
A 含于 B;
B 含于 A;
A 等于 B;
A 不等于 B
[解决办法]
>不存在这样的程序P,在输入两个正则语法 A 和B,给出下列判定结果:
上下文无关语法的等价性是不可判定的,正则语法的等价性是可判定的(归约到最小DFA然后判断两个图是否同构)。
[解决办法]
.是代表任意字符
*是代表任意多个
?是代表0或1个字符colou?r就代表color或者colour