含有通配符的两个字符串,如何判断是不是包含与被包含的关系

时间:2023-01-04 19:02:24
只含有*与?两个通配符

比如:

*a 与 *b?a,要判断出前者包含后者

用正则表达式可以吗?我没有用过,希望能简单说一下使用方法。

10 个解决方案

#1


牛B问题

#2


一般都是判断一个完整的字符串里是否包含了有通配符的字符串
像你的*a 与 *b?a
因为*可以代表任意字符,那说它包含和没包含都是可以的

#3


我想搂主意思大概是*代表任意的多个字符 ?任意的一个字符这么个规则
我看这个简单的比较不需要用正则 主要是你要定好*/?表示的是0-n/0-1还是1-n/1-1个字符

比如 a* 和 *b?a
就首先从一个模式找出非通配符的字符串 作为一个符号表 通配符则保留 比如*a 符号表就是"*" "a" 
对于连续出现的通配符可以根据你的策略(就是是否0个字符也算符合?或者*)合并为一个
比如*?合并为*(如果*表示0-n而?表示0-1)

从另一个模式字符串找所符号表中所有非通配符的符号 确保按顺序出现了所有的符号
比如符号表有a b两个符号 你就需要模式字符串中从后往前出现过a和b
能满足这个条件的情况统统记录下来 并记录每次出现 符号前后的字符数(0-n)

这样再顺序检查每次通配符出现的时候 另一模式字串中的那一处间隔 大小符合这个限制 那就可以说一个模式包含另一个模式 否则尝试下一个非通配符号都匹配的情况 不知道说清了没有 我这是一个笨点的方法 性能和占用内存空间都没有考虑

然后从另一模式按找出这些符号 记录出现的顺序 令符号的出现顺序和
比如*a第一个字符是通配符么

#4


引用 3 楼 an_bachelor 的回复:
我想搂主意思大概是*代表任意的多个字符 ?任意的一个字符这么个规则
我看这个简单的比较不需要用正则 主要是你要定好*/?表示的是0-n/0-1还是1-n/1-1个字符

比如 a* 和 *b?a
就首先从一个模式找出非通配符的字符串 作为一个符号表 通配符则保留 比如*a 符号表就是"*" "a"
对于连续出现的通配符可以根据你的策略(就是是否0个字符也算符合?或者*)合并为一个
比如……

*代表0到n任意个字符,?代表一个字符

你说的我没太理解,我再研究研究

#5


用双方已知字符的交集作为分隔符,分区域判断包含关系

#6


引用 5 楼 wizardk 的回复:
用双方已知字符的交集作为分隔符,分区域判断包含关系

自己写算法吗,呵呵,我试试。

#7


引用 5 楼 wizardk 的回复:
用双方已知字符的交集作为分隔符,分区域判断包含关系

如果同一个字符在不同位置都有交集呢?
比如*a?a和*b?a

#8


哦,貌似自己写算法也不是很困难,前几天写了一个,有一些小问题,这段时间忙,没时间改,有空再改改试试。

#9


自己写判断吧,不难的,

#10


楼主解决了吗,我也遇到这个问题了

#1


牛B问题

#2


一般都是判断一个完整的字符串里是否包含了有通配符的字符串
像你的*a 与 *b?a
因为*可以代表任意字符,那说它包含和没包含都是可以的

#3


我想搂主意思大概是*代表任意的多个字符 ?任意的一个字符这么个规则
我看这个简单的比较不需要用正则 主要是你要定好*/?表示的是0-n/0-1还是1-n/1-1个字符

比如 a* 和 *b?a
就首先从一个模式找出非通配符的字符串 作为一个符号表 通配符则保留 比如*a 符号表就是"*" "a" 
对于连续出现的通配符可以根据你的策略(就是是否0个字符也算符合?或者*)合并为一个
比如*?合并为*(如果*表示0-n而?表示0-1)

从另一个模式字符串找所符号表中所有非通配符的符号 确保按顺序出现了所有的符号
比如符号表有a b两个符号 你就需要模式字符串中从后往前出现过a和b
能满足这个条件的情况统统记录下来 并记录每次出现 符号前后的字符数(0-n)

这样再顺序检查每次通配符出现的时候 另一模式字串中的那一处间隔 大小符合这个限制 那就可以说一个模式包含另一个模式 否则尝试下一个非通配符号都匹配的情况 不知道说清了没有 我这是一个笨点的方法 性能和占用内存空间都没有考虑

然后从另一模式按找出这些符号 记录出现的顺序 令符号的出现顺序和
比如*a第一个字符是通配符么

#4


引用 3 楼 an_bachelor 的回复:
我想搂主意思大概是*代表任意的多个字符 ?任意的一个字符这么个规则
我看这个简单的比较不需要用正则 主要是你要定好*/?表示的是0-n/0-1还是1-n/1-1个字符

比如 a* 和 *b?a
就首先从一个模式找出非通配符的字符串 作为一个符号表 通配符则保留 比如*a 符号表就是"*" "a"
对于连续出现的通配符可以根据你的策略(就是是否0个字符也算符合?或者*)合并为一个
比如……

*代表0到n任意个字符,?代表一个字符

你说的我没太理解,我再研究研究

#5


用双方已知字符的交集作为分隔符,分区域判断包含关系

#6


引用 5 楼 wizardk 的回复:
用双方已知字符的交集作为分隔符,分区域判断包含关系

自己写算法吗,呵呵,我试试。

#7


引用 5 楼 wizardk 的回复:
用双方已知字符的交集作为分隔符,分区域判断包含关系

如果同一个字符在不同位置都有交集呢?
比如*a?a和*b?a

#8


哦,貌似自己写算法也不是很困难,前几天写了一个,有一些小问题,这段时间忙,没时间改,有空再改改试试。

#9


自己写判断吧,不难的,

#10


楼主解决了吗,我也遇到这个问题了