Regex 正则表达式来匹配字符串中的几个字符

Regex 正则表达式来匹配字符串中的几个字符,regex,string,algorithm,Regex,String,Algorithm,我试图在另一个字符串中找到一个字符串。但是,即使一个或多个字符不匹配,我也会尝试匹配 让我举例说明: 假设我有一个字符串'abcdefghij'。现在,如果要匹配的字符串是“abcd” 我会写strfind('abcdefghij','abc') 现在,我有一个字符串“adcf”。注意,在两个字符中有一个错配,我认为它是一个匹配。 知道怎么做吗 我知道,这不是最理想的代码 例如: a='abcdefghijk'; b='xbcx' c='abxx' d='axxd' e='abcx' f='xa

我试图在另一个字符串中找到一个字符串。但是,即使一个或多个字符不匹配,我也会尝试匹配

让我举例说明:

假设我有一个字符串'abcdefghij'。现在,如果要匹配的字符串是“abcd”

我会写strfind('abcdefghij','abc')

现在,我有一个字符串“adcf”。注意,在两个字符中有一个错配,我认为它是一个匹配。 知道怎么做吗

我知道,这不是最理想的代码

例如:

a='abcdefghijk';
b='xbcx'
c='abxx'
d='axxd'
e='abcx'
f='xabc'
g='axcd'
h='abxd'
i ='abcd'
所有这些字符串都应与
a
匹配。我希望这个例子能更清楚地说明这一点。其思想是,如果还有1或2个字符不匹配,则应将其视为匹配。

在代码中

c=a-b
无效(矩阵尺寸不相同)

如果您至少需要一个匹配项,而不是顺序(如您的示例所示),您可以使用以下内容:-

>> a='abcdefgh';
>> b='adcf';
>> sum(ismember(a,b)) ~= 0

ans =

     1
在代码中

c=a-b
无效(矩阵尺寸不相同)

如果您至少需要一个匹配项,而不是顺序(如您的示例所示),您可以使用以下内容:-

>> a='abcdefgh';
>> b='adcf';
>> sum(ismember(a,b)) ~= 0

ans =

     1
在代码中

c=a-b
无效(矩阵尺寸不相同)

如果您至少需要一个匹配项,而不是顺序(如您的示例所示),您可以使用以下内容:-

>> a='abcdefgh';
>> b='adcf';
>> sum(ismember(a,b)) ~= 0

ans =

     1
在代码中

c=a-b
无效(矩阵尺寸不相同)

如果您至少需要一个匹配项,而不是顺序(如您的示例所示),您可以使用以下内容:-

>> a='abcdefgh';
>> b='adcf';
>> sum(ismember(a,b)) ~= 0

ans =

     1

你可以这样做:

A = 'abcdefghij'; % Main string
B = 'adcf'; % String to be found
tolerance = 2; % Maximum number of different characters to tolerate

nA = numel(A);
nB = numel(B);
pos = find(sum(A(mod(cumsum([(1:nA)' ones(nA, nB - 1)], 2) - 1, nA) + 1) == repmat(B, nA, 1), 2) >= nB - tolerance);
在这种情况下,它将返回pos=[13]因为“adcf”可以在第一个位置匹配(匹配“a?c”)和第三个位置匹配(匹配“?d?f”)

说明:

  • 首先,我们取A和B的大小
  • 然后,我们创建矩阵
    [(1:nA)'ones(nA,nB-1)]
    ,这为我们提供了:
输出:

 1     1     1     1
 2     1     1     1
 3     1     1     1
 4     1     1     1
 5     1     1     1
 6     1     1     1
 7     1     1     1
 8     1     1     1
 9     1     1     1
10     1     1     1
 1     2     3     4
 2     3     4     5
 3     4     5     6
 4     5     6     7
 5     6     7     8
 6     7     8     9
 7     8     9    10
 8     9    10    11
 9    10    11    12
10    11    12    13
 1     2     3     4
 2     3     4     5
 3     4     5     6
 4     5     6     7
 5     6     7     8
 6     7     8     9
 7     8     9    10
 8     9    10     1
 9    10     1     2
10     1     2     3
abcd
bcde
cdef
defg
efgh
fghi
ghij
hija
ijab
jabc
adcf
adcf
adcf
adcf
adcf
adcf
adcf
adcf
adcf
adcf
 1     0     1     0
 0     0     0     0
 0     1     0     1
 0     0     0     0
 0     0     0     0
 0     0     0     0
 0     0     0     0
 0     0     0     0
 0     0     0     0
 0     0     0     0
2
0
2
0
0
0
0
0
0
0
  • 为了实现这一目标,我们使用以下方法对右侧进行累积求和:
输出:

 1     1     1     1
 2     1     1     1
 3     1     1     1
 4     1     1     1
 5     1     1     1
 6     1     1     1
 7     1     1     1
 8     1     1     1
 9     1     1     1
10     1     1     1
 1     2     3     4
 2     3     4     5
 3     4     5     6
 4     5     6     7
 5     6     7     8
 6     7     8     9
 7     8     9    10
 8     9    10    11
 9    10    11    12
10    11    12    13
 1     2     3     4
 2     3     4     5
 3     4     5     6
 4     5     6     7
 5     6     7     8
 6     7     8     9
 7     8     9    10
 8     9    10     1
 9    10     1     2
10     1     2     3
abcd
bcde
cdef
defg
efgh
fghi
ghij
hija
ijab
jabc
adcf
adcf
adcf
adcf
adcf
adcf
adcf
adcf
adcf
adcf
 1     0     1     0
 0     0     0     0
 0     1     0     1
 0     0     0     0
 0     0     0     0
 0     0     0     0
 0     0     0     0
 0     0     0     0
 0     0     0     0
 0     0     0     0
2
0
2
0
0
0
0
0
0
0
  • 然后使用函数,使每个数字介于1和nA之间,如下所示:
输出:

 1     1     1     1
 2     1     1     1
 3     1     1     1
 4     1     1     1
 5     1     1     1
 6     1     1     1
 7     1     1     1
 8     1     1     1
 9     1     1     1
10     1     1     1
 1     2     3     4
 2     3     4     5
 3     4     5     6
 4     5     6     7
 5     6     7     8
 6     7     8     9
 7     8     9    10
 8     9    10    11
 9    10    11    12
10    11    12    13
 1     2     3     4
 2     3     4     5
 3     4     5     6
 4     5     6     7
 5     6     7     8
 6     7     8     9
 7     8     9    10
 8     9    10     1
 9    10     1     2
10     1     2     3
abcd
bcde
cdef
defg
efgh
fghi
ghij
hija
ijab
jabc
adcf
adcf
adcf
adcf
adcf
adcf
adcf
adcf
adcf
adcf
 1     0     1     0
 0     0     0     0
 0     1     0     1
 0     0     0     0
 0     0     0     0
 0     0     0     0
 0     0     0     0
 0     0     0     0
 0     0     0     0
 0     0     0     0
2
0
2
0
0
0
0
0
0
0
  • 然后,我们使用该矩阵作为矩阵的索引
输出:

 1     1     1     1
 2     1     1     1
 3     1     1     1
 4     1     1     1
 5     1     1     1
 6     1     1     1
 7     1     1     1
 8     1     1     1
 9     1     1     1
10     1     1     1
 1     2     3     4
 2     3     4     5
 3     4     5     6
 4     5     6     7
 5     6     7     8
 6     7     8     9
 7     8     9    10
 8     9    10    11
 9    10    11    12
10    11    12    13
 1     2     3     4
 2     3     4     5
 3     4     5     6
 4     5     6     7
 5     6     7     8
 6     7     8     9
 7     8     9    10
 8     9    10     1
 9    10     1     2
10     1     2     3
abcd
bcde
cdef
defg
efgh
fghi
ghij
hija
ijab
jabc
adcf
adcf
adcf
adcf
adcf
adcf
adcf
adcf
adcf
adcf
 1     0     1     0
 0     0     0     0
 0     1     0     1
 0     0     0     0
 0     0     0     0
 0     0     0     0
 0     0     0     0
 0     0     0     0
 0     0     0     0
 0     0     0     0
2
0
2
0
0
0
0
0
0
0
注:该矩阵具有大小为nB的A的所有可能子字符串

  • 现在我们用来复制B下的“nA行”
输出:

 1     1     1     1
 2     1     1     1
 3     1     1     1
 4     1     1     1
 5     1     1     1
 6     1     1     1
 7     1     1     1
 8     1     1     1
 9     1     1     1
10     1     1     1
 1     2     3     4
 2     3     4     5
 3     4     5     6
 4     5     6     7
 5     6     7     8
 6     7     8     9
 7     8     9    10
 8     9    10    11
 9    10    11    12
10    11    12    13
 1     2     3     4
 2     3     4     5
 3     4     5     6
 4     5     6     7
 5     6     7     8
 6     7     8     9
 7     8     9    10
 8     9    10     1
 9    10     1     2
10     1     2     3
abcd
bcde
cdef
defg
efgh
fghi
ghij
hija
ijab
jabc
adcf
adcf
adcf
adcf
adcf
adcf
adcf
adcf
adcf
adcf
 1     0     1     0
 0     0     0     0
 0     1     0     1
 0     0     0     0
 0     0     0     0
 0     0     0     0
 0     0     0     0
 0     0     0     0
 0     0     0     0
 0     0     0     0
2
0
2
0
0
0
0
0
0
0
  • 并进行直接比较:
输出:

 1     1     1     1
 2     1     1     1
 3     1     1     1
 4     1     1     1
 5     1     1     1
 6     1     1     1
 7     1     1     1
 8     1     1     1
 9     1     1     1
10     1     1     1
 1     2     3     4
 2     3     4     5
 3     4     5     6
 4     5     6     7
 5     6     7     8
 6     7     8     9
 7     8     9    10
 8     9    10    11
 9    10    11    12
10    11    12    13
 1     2     3     4
 2     3     4     5
 3     4     5     6
 4     5     6     7
 5     6     7     8
 6     7     8     9
 7     8     9    10
 8     9    10     1
 9    10     1     2
10     1     2     3
abcd
bcde
cdef
defg
efgh
fghi
ghij
hija
ijab
jabc
adcf
adcf
adcf
adcf
adcf
adcf
adcf
adcf
adcf
adcf
 1     0     1     0
 0     0     0     0
 0     1     0     1
 0     0     0     0
 0     0     0     0
 0     0     0     0
 0     0     0     0
 0     0     0     0
 0     0     0     0
 0     0     0     0
2
0
2
0
0
0
0
0
0
0
  • 对右图求和,得出以下结论:
输出:

 1     1     1     1
 2     1     1     1
 3     1     1     1
 4     1     1     1
 5     1     1     1
 6     1     1     1
 7     1     1     1
 8     1     1     1
 9     1     1     1
10     1     1     1
 1     2     3     4
 2     3     4     5
 3     4     5     6
 4     5     6     7
 5     6     7     8
 6     7     8     9
 7     8     9    10
 8     9    10    11
 9    10    11    12
10    11    12    13
 1     2     3     4
 2     3     4     5
 3     4     5     6
 4     5     6     7
 5     6     7     8
 6     7     8     9
 7     8     9    10
 8     9    10     1
 9    10     1     2
10     1     2     3
abcd
bcde
cdef
defg
efgh
fghi
ghij
hija
ijab
jabc
adcf
adcf
adcf
adcf
adcf
adcf
adcf
adcf
adcf
adcf
 1     0     1     0
 0     0     0     0
 0     1     0     1
 0     0     0     0
 0     0     0     0
 0     0     0     0
 0     0     0     0
 0     0     0     0
 0     0     0     0
 0     0     0     0
2
0
2
0
0
0
0
0
0
0
这是每个可能的子字符串上的字符匹配数

  • 最后,我们使用在我们的容差范围内选择匹配的索引

    • 您可以这样做:

      A = 'abcdefghij'; % Main string
      B = 'adcf'; % String to be found
      tolerance = 2; % Maximum number of different characters to tolerate
      
      nA = numel(A);
      nB = numel(B);
      pos = find(sum(A(mod(cumsum([(1:nA)' ones(nA, nB - 1)], 2) - 1, nA) + 1) == repmat(B, nA, 1), 2) >= nB - tolerance);
      
      在这种情况下,它将返回pos=[13]因为“adcf”可以在第一个位置匹配(匹配“a?c”)和第三个位置匹配(匹配“?d?f”)

      说明:

      • 首先,我们取A和B的大小
      • 然后,我们创建矩阵
        [(1:nA)'ones(nA,nB-1)]
        ,这为我们提供了:
      输出:

       1     1     1     1
       2     1     1     1
       3     1     1     1
       4     1     1     1
       5     1     1     1
       6     1     1     1
       7     1     1     1
       8     1     1     1
       9     1     1     1
      10     1     1     1
      
       1     2     3     4
       2     3     4     5
       3     4     5     6
       4     5     6     7
       5     6     7     8
       6     7     8     9
       7     8     9    10
       8     9    10    11
       9    10    11    12
      10    11    12    13
      
       1     2     3     4
       2     3     4     5
       3     4     5     6
       4     5     6     7
       5     6     7     8
       6     7     8     9
       7     8     9    10
       8     9    10     1
       9    10     1     2
      10     1     2     3
      
      abcd
      bcde
      cdef
      defg
      efgh
      fghi
      ghij
      hija
      ijab
      jabc
      
      adcf
      adcf
      adcf
      adcf
      adcf
      adcf
      adcf
      adcf
      adcf
      adcf
      
       1     0     1     0
       0     0     0     0
       0     1     0     1
       0     0     0     0
       0     0     0     0
       0     0     0     0
       0     0     0     0
       0     0     0     0
       0     0     0     0
       0     0     0     0
      
      2
      0
      2
      0
      0
      0
      0
      0
      0
      0
      
      • 为了实现这一目标,我们使用以下方法对右侧进行累积求和:
      输出:

       1     1     1     1
       2     1     1     1
       3     1     1     1
       4     1     1     1
       5     1     1     1
       6     1     1     1
       7     1     1     1
       8     1     1     1
       9     1     1     1
      10     1     1     1
      
       1     2     3     4
       2     3     4     5
       3     4     5     6
       4     5     6     7
       5     6     7     8
       6     7     8     9
       7     8     9    10
       8     9    10    11
       9    10    11    12
      10    11    12    13
      
       1     2     3     4
       2     3     4     5
       3     4     5     6
       4     5     6     7
       5     6     7     8
       6     7     8     9
       7     8     9    10
       8     9    10     1
       9    10     1     2
      10     1     2     3
      
      abcd
      bcde
      cdef
      defg
      efgh
      fghi
      ghij
      hija
      ijab
      jabc
      
      adcf
      adcf
      adcf
      adcf
      adcf
      adcf
      adcf
      adcf
      adcf
      adcf
      
       1     0     1     0
       0     0     0     0
       0     1     0     1
       0     0     0     0
       0     0     0     0
       0     0     0     0
       0     0     0     0
       0     0     0     0
       0     0     0     0
       0     0     0     0
      
      2
      0
      2
      0
      0
      0
      0
      0
      0
      0
      
      • 然后使用函数,使每个数字介于1和nA之间,如下所示:
      输出:

       1     1     1     1
       2     1     1     1
       3     1     1     1
       4     1     1     1
       5     1     1     1
       6     1     1     1
       7     1     1     1
       8     1     1     1
       9     1     1     1
      10     1     1     1
      
       1     2     3     4
       2     3     4     5
       3     4     5     6
       4     5     6     7
       5     6     7     8
       6     7     8     9
       7     8     9    10
       8     9    10    11
       9    10    11    12
      10    11    12    13
      
       1     2     3     4
       2     3     4     5
       3     4     5     6
       4     5     6     7
       5     6     7     8
       6     7     8     9
       7     8     9    10
       8     9    10     1
       9    10     1     2
      10     1     2     3
      
      abcd
      bcde
      cdef
      defg
      efgh
      fghi
      ghij
      hija
      ijab
      jabc
      
      adcf
      adcf
      adcf
      adcf
      adcf
      adcf
      adcf
      adcf
      adcf
      adcf
      
       1     0     1     0
       0     0     0     0
       0     1     0     1
       0     0     0     0
       0     0     0     0
       0     0     0     0
       0     0     0     0
       0     0     0     0
       0     0     0     0
       0     0     0     0
      
      2
      0
      2
      0
      0
      0
      0
      0
      0
      0
      
      • 然后,我们使用该矩阵作为矩阵的索引
      输出:

       1     1     1     1
       2     1     1     1
       3     1     1     1
       4     1     1     1
       5     1     1     1
       6     1     1     1
       7     1     1     1
       8     1     1     1
       9     1     1     1
      10     1     1     1
      
       1     2     3     4
       2     3     4     5
       3     4     5     6
       4     5     6     7
       5     6     7     8
       6     7     8     9
       7     8     9    10
       8     9    10    11
       9    10    11    12
      10    11    12    13
      
       1     2     3     4
       2     3     4     5
       3     4     5     6
       4     5     6     7
       5     6     7     8
       6     7     8     9
       7     8     9    10
       8     9    10     1
       9    10     1     2
      10     1     2     3
      
      abcd
      bcde
      cdef
      defg
      efgh
      fghi
      ghij
      hija
      ijab
      jabc
      
      adcf
      adcf
      adcf
      adcf
      adcf
      adcf
      adcf
      adcf
      adcf
      adcf
      
       1     0     1     0
       0     0     0     0
       0     1     0     1
       0     0     0     0
       0     0     0     0
       0     0     0     0
       0     0     0     0
       0     0     0     0
       0     0     0     0
       0     0     0     0
      
      2
      0
      2
      0
      0
      0
      0
      0
      0
      0
      
      注:该矩阵具有大小为nB的A的所有可能子字符串

      • 现在我们用来复制B下的“nA行”
      输出:

       1     1     1     1
       2     1     1     1
       3     1     1     1
       4     1     1     1
       5     1     1     1
       6     1     1     1
       7     1     1     1
       8     1     1     1
       9     1     1     1
      10     1     1     1
      
       1     2     3     4
       2     3     4     5
       3     4     5     6
       4     5     6     7
       5     6     7     8
       6     7     8     9
       7     8     9    10
       8     9    10    11
       9    10    11    12
      10    11    12    13
      
       1     2     3     4
       2     3     4     5
       3     4     5     6
       4     5     6     7
       5     6     7     8
       6     7     8     9
       7     8     9    10
       8     9    10     1
       9    10     1     2
      10     1     2     3
      
      abcd
      bcde
      cdef
      defg
      efgh
      fghi
      ghij
      hija
      ijab
      jabc
      
      adcf
      adcf
      adcf
      adcf
      adcf
      adcf
      adcf
      adcf
      adcf
      adcf
      
       1     0     1     0
       0     0     0     0
       0     1     0     1
       0     0     0     0
       0     0     0     0
       0     0     0     0
       0     0     0     0
       0     0     0     0
       0     0     0     0
       0     0     0     0
      
      2
      0
      2
      0
      0
      0
      0
      0
      0
      0
      
      • 并进行直接比较:
      输出:

       1     1     1     1
       2     1     1     1
       3     1     1     1
       4     1     1     1
       5     1     1     1
       6     1     1     1
       7     1     1     1
       8     1     1     1
       9     1     1     1
      10     1     1     1
      
       1     2     3     4
       2     3     4     5
       3     4     5     6
       4     5     6     7
       5     6     7     8
       6     7     8     9
       7     8     9    10
       8     9    10    11
       9    10    11    12
      10    11    12    13
      
       1     2     3     4
       2     3     4     5
       3     4     5     6
       4     5     6     7
       5     6     7     8
       6     7     8     9
       7     8     9    10
       8     9    10     1
       9    10     1     2
      10     1     2     3
      
      abcd
      bcde
      cdef
      defg
      efgh
      fghi
      ghij
      hija
      ijab
      jabc
      
      adcf
      adcf
      adcf
      adcf
      adcf
      adcf
      adcf
      adcf
      adcf
      adcf
      
       1     0     1     0
       0     0     0     0
       0     1     0     1
       0     0     0     0
       0     0     0     0
       0     0     0     0
       0     0     0     0
       0     0     0     0
       0     0     0     0
       0     0     0     0
      
      2
      0
      2
      0
      0
      0
      0
      0
      0
      0
      
      • 对右图求和,得出以下结论:
      输出:

       1     1     1     1
       2     1     1     1
       3     1     1     1
       4     1     1     1
       5     1     1     1
       6     1     1     1
       7     1     1     1
       8     1     1     1
       9     1     1     1
      10     1     1     1
      
       1     2     3     4
       2     3     4     5
       3     4     5     6
       4     5     6     7
       5     6     7     8
       6     7     8     9
       7     8     9    10
       8     9    10    11
       9    10    11    12
      10    11    12    13
      
       1     2     3     4
       2     3     4     5
       3     4     5     6
       4     5     6     7
       5     6     7     8
       6     7     8     9
       7     8     9    10
       8     9    10     1
       9    10     1     2
      10     1     2     3
      
      abcd
      bcde
      cdef
      defg
      efgh
      fghi
      ghij
      hija
      ijab
      jabc
      
      adcf
      adcf
      adcf
      adcf
      adcf
      adcf
      adcf
      adcf
      adcf
      adcf
      
       1     0     1     0
       0     0     0     0
       0     1     0     1
       0     0     0     0
       0     0     0     0
       0     0     0     0
       0     0     0     0
       0     0     0     0
       0     0     0     0
       0     0     0     0
      
      2
      0
      2
      0
      0
      0
      0
      0
      0
      0
      
      这是每个可能的子字符串上的字符匹配数

      • 最后,我们使用在我们的容差范围内选择匹配的索引

        • 您可以这样做:

          A = 'abcdefghij'; % Main string
          B = 'adcf'; % String to be found
          tolerance = 2; % Maximum number of different characters to tolerate
          
          nA = numel(A);
          nB = numel(B);
          pos = find(sum(A(mod(cumsum([(1:nA)' ones(nA, nB - 1)], 2) - 1, nA) + 1) == repmat(B, nA, 1), 2) >= nB - tolerance);
          
          在这种情况下,它将返回pos=[13]因为“adcf”可以在第一个位置匹配(匹配“a?c”)和第三个位置匹配(匹配“?d?f”)

          说明:

          • 首先,我们取A和B的大小
          • 然后,我们创建矩阵
            [(1:nA)'ones(nA,nB-1)]
            ,这为我们提供了:
          输出:

           1     1     1     1
           2     1     1     1
           3     1     1     1
           4     1     1     1
           5     1     1     1
           6     1     1     1
           7     1     1     1
           8     1     1     1
           9     1     1     1
          10     1     1     1
          
           1     2     3     4
           2     3     4     5
           3     4     5     6
           4     5     6     7
           5     6     7     8
           6     7     8     9
           7     8     9    10
           8     9    10    11
           9    10    11    12
          10    11    12    13
          
           1     2     3     4
           2     3     4     5
           3     4     5     6
           4     5     6     7
           5     6     7     8
           6     7     8     9
           7     8     9    10
           8     9    10     1
           9    10     1     2
          10     1     2     3
          
          abcd
          bcde
          cdef
          defg
          efgh
          fghi
          ghij
          hija
          ijab
          jabc
          
          adcf
          adcf
          adcf
          adcf
          adcf
          adcf
          adcf
          adcf
          adcf
          adcf
          
           1     0     1     0
           0     0     0     0
           0     1     0     1
           0     0     0     0
           0     0     0     0
           0     0     0     0
           0     0     0     0
           0     0     0     0
           0     0     0     0
           0     0     0     0
          
          2
          0
          2
          0
          0
          0
          0
          0
          0
          0
          
          • 为了实现这一目标,我们使用以下方法对右侧进行累积求和:
          输出:

           1     1     1     1
           2     1     1     1
           3     1     1     1
           4     1     1     1
           5     1     1     1
           6     1     1     1
           7     1     1     1
           8     1     1     1
           9     1     1     1
          10     1     1     1
          
           1     2     3     4
           2     3     4     5
           3     4     5     6
           4     5     6     7
           5     6     7     8
           6     7     8     9
           7     8     9    10
           8     9    10    11
           9    10    11    12
          10    11    12    13
          
           1     2     3     4
           2     3     4     5
           3     4     5     6
           4     5     6     7
           5     6     7     8
           6     7     8     9
           7     8     9    10
           8     9    10     1
           9    10     1     2
          10     1     2     3
          
          abcd
          bcde
          cdef
          defg
          efgh
          fghi
          ghij
          hija
          ijab
          jabc
          
          adcf
          adcf
          adcf
          adcf
          adcf
          adcf
          adcf
          adcf
          adcf
          adcf
          
           1     0     1     0
           0     0     0     0
           0     1     0     1
           0     0     0     0
           0     0     0     0
           0     0     0     0
           0     0     0     0
           0     0     0     0
           0     0     0     0
           0     0     0     0
          
          2
          0
          2
          0
          0
          0
          0
          0
          0
          0
          
          • 然后使用函数,使每个数字介于1和nA之间,如下所示:
          输出:

           1     1     1     1
           2     1     1     1
           3     1     1     1
           4     1     1     1
           5     1     1     1
           6     1     1     1
           7     1     1     1
           8     1     1     1
           9     1     1     1
          10     1     1     1
          
           1     2     3     4
           2     3     4     5
           3     4     5     6
           4     5     6     7
           5     6     7     8
           6     7     8     9
           7     8     9    10
           8     9    10    11
           9    10    11    12
          10    11    12    13
          
           1     2     3     4
           2     3     4     5
           3     4     5     6
           4     5     6     7
           5     6     7     8
           6     7     8     9
           7     8     9    10
           8     9    10     1
           9    10     1     2
          10     1     2     3
          
          abcd
          bcde
          cdef
          defg
          efgh
          fghi
          ghij
          hija
          ijab
          jabc
          
          adcf
          adcf
          adcf
          adcf
          adcf
          adcf
          adcf
          adcf
          adcf
          adcf
          
           1     0     1     0
           0     0     0     0
           0     1     0     1
           0     0     0     0
           0     0     0     0
           0     0     0     0
           0     0     0     0
           0     0     0     0
           0     0     0     0
           0     0     0     0
          
          2
          0
          2
          0
          0
          0
          0
          0
          0
          0
          
          • 然后,我们使用该矩阵作为矩阵的索引
          输出:

           1     1     1     1
           2     1     1     1
           3     1     1     1
           4     1     1     1
           5     1     1     1
           6     1     1     1
           7     1     1     1
           8     1     1     1
           9     1     1     1
          10     1     1     1
          
           1     2     3     4
           2     3     4     5
           3     4     5     6
           4     5     6     7
           5     6     7     8
           6     7     8     9
           7     8     9    10
           8     9    10    11
           9    10    11    12
          10    11    12    13
          
           1     2     3     4
           2     3     4     5
           3     4     5     6
           4     5     6     7
           5     6     7     8
           6     7     8     9
           7     8     9    10
           8     9    10     1
           9    10     1     2
          10     1     2     3
          
          abcd
          bcde
          cdef
          defg
          efgh
          fghi
          ghij
          hija
          ijab
          jabc
          
          adcf
          adcf
          adcf
          adcf
          adcf
          adcf
          adcf
          adcf
          adcf
          adcf
          
           1     0     1     0
           0     0     0     0
           0     1     0     1
           0     0     0     0
           0     0     0     0
           0     0     0     0
           0     0     0     0
           0     0     0     0
           0     0     0     0
           0     0     0     0
          
          2
          0
          2
          0
          0
          0
          0
          0
          0
          0
          
          注:该矩阵具有大小为nB的A的所有可能子字符串

          • 现在我们用来复制B下的“nA行”
          输出:

           1     1     1     1
           2     1     1     1
           3     1     1     1
           4     1     1     1
           5     1     1     1
           6     1     1     1
           7     1     1     1
           8     1     1     1
           9     1     1     1
          10     1     1     1
          
           1     2     3     4
           2     3     4     5
           3     4     5     6
           4     5     6     7
           5     6     7     8
           6     7     8     9
           7     8     9    10
           8     9    10    11
           9    10    11    12
          10    11    12    13
          
           1     2     3     4
           2     3     4     5
           3     4     5     6
           4     5     6     7
           5     6     7     8
           6     7     8     9
           7     8     9    10
           8     9    10     1
           9    10     1     2
          10     1     2     3
          
          abcd
          bcde
          cdef
          defg
          efgh
          fghi
          ghij
          hija
          ijab
          jabc
          
          adcf
          adcf
          adcf
          adcf
          adcf
          adcf
          adcf
          adcf
          adcf
          adcf
          
           1     0     1     0
           0     0     0     0
           0     1     0     1
           0     0     0     0
           0     0     0     0
           0     0     0     0
           0     0     0     0
           0     0     0     0
           0     0     0     0
           0     0     0     0
          
          2
          0
          2
          0
          0
          0
          0
          0
          0
          0
          
          • 并进行直接比较:
          输出:

           1     1     1     1
           2     1     1     1
           3     1     1     1
           4     1     1     1
           5     1     1     1
           6     1     1     1
           7     1     1     1
           8     1     1     1
           9     1     1     1
          10     1     1     1
          
           1     2     3     4
           2     3     4     5
           3     4     5     6
           4     5     6     7
           5     6     7     8
           6     7     8     9
           7     8     9    10
           8     9    10    11
           9    10    11    12
          10    11    12    13
          
           1     2     3     4
           2     3     4     5
           3     4     5     6
           4     5     6     7
           5     6     7     8
           6     7     8     9
           7     8     9    10
           8     9    10     1
           9    10     1     2
          10     1     2     3
          
          abcd
          bcde
          cdef
          defg
          efgh
          fghi
          ghij
          hija
          ijab
          jabc
          
          adcf
          adcf
          adcf
          adcf
          adcf
          adcf
          adcf
          adcf
          adcf
          adcf
          
           1     0     1     0
           0     0     0     0
           0     1     0     1
           0     0     0     0
           0     0     0     0
           0     0     0     0
           0     0     0     0
           0     0     0     0
           0     0     0     0
           0     0     0     0
          
          2
          0
          2
          0
          0
          0
          0
          0
          0
          0
          
          • 对右图求和,得出以下结论:
          输出:

           1     1     1     1
           2     1     1     1
           3     1     1     1
           4     1     1     1
           5     1     1     1
           6     1     1     1
           7     1     1     1
           8     1     1     1
           9     1     1     1
          10     1     1     1
          
           1     2     3     4
           2     3     4     5
           3     4     5     6
           4     5     6     7
           5     6     7     8
           6     7     8     9
           7     8     9    10
           8     9    10    11
           9    10    11    12
          10    11    12    13
          
           1     2     3     4
           2     3     4     5
           3     4     5     6
           4     5     6     7
           5     6     7     8
           6     7     8     9
           7     8     9    10
           8     9    10     1
           9    10     1     2
          10     1     2     3
          
          abcd
          bcde
          cdef
          defg
          efgh
          fghi
          ghij
          hija
          ijab
          jabc
          
          adcf
          adcf
          adcf
          adcf
          adcf
          adcf
          adcf
          adcf
          adcf
          adcf
          
           1     0     1     0
           0     0     0     0
           0     1     0     1
           0     0     0     0
           0     0     0     0
           0     0     0     0
           0     0     0     0
           0     0     0     0
           0     0     0     0
           0     0     0     0
          
          2
          0
          2
          0
          0
          0
          0
          0
          0
          0
          
          这是每个可能的子字符串上的字符匹配数

          • 最后,我们使用在我们的容差范围内选择匹配的索引

            • 您可以这样做:

              A = 'abcdefghij'; % Main string
              B = 'adcf'; % String to be found
              tolerance = 2; % Maximum number of different characters to tolerate
              
              nA = numel(A);
              nB = numel(B);
              pos = find(sum(A(mod(cumsum([(1:nA)' ones(nA, nB - 1)], 2) - 1, nA) + 1) == repmat(B, nA, 1), 2) >= nB - tolerance);
              
              在这种情况下,它将返回pos=[13]因为“adcf”可以在第一个位置匹配(匹配“a?c”)和第三个位置匹配(匹配“?d?f”)

              说明:

              • 首先,我们取A和B的大小
              • 然后,我们创建矩阵
                [(1:nA)'ones(nA,nB-1)]
                ,这为我们提供了:
              输出:

               1     1     1     1
               2     1     1     1
               3     1     1     1
               4     1     1     1
               5     1     1     1
               6     1     1     1
               7     1     1     1
               8     1     1     1
               9     1     1     1
              10     1     1     1
              
               1     2     3     4
               2     3     4     5
               3     4     5     6
               4     5     6     7
               5     6     7     8
               6     7     8     9
               7     8     9    10
               8     9    10    11
               9    10    11    12
              10    11    12    13
              
               1     2     3     4
               2     3     4     5
               3     4     5     6
               4     5     6     7
               5     6     7     8
               6     7     8     9
               7     8     9    10
               8     9    10     1
               9    10     1     2
              10     1     2     3
              
              abcd
              bcde
              cdef
              defg
              efgh
              fghi
              ghij
              hija
              ijab
              jabc
              
              adcf
              adcf
              adcf
              adcf
              adcf
              adcf
              adcf
              adcf
              adcf
              adcf
              
               1     0     1     0
               0     0     0     0
               0     1     0     1
               0     0     0     0
               0     0     0     0
               0     0     0     0
               0     0     0     0
               0     0     0     0
               0     0     0     0
               0     0     0     0
              
              2
              0
              2
              0
              0
              0
              0
              0
              0
              0
              
              • 为了实现这一目标,我们使用以下方法对右侧进行累积求和:
              输出:

               1     1     1     1
               2     1     1     1
               3     1     1     1
               4     1     1     1
               5     1     1     1
               6     1     1     1
               7     1     1     1
               8     1     1     1
               9     1     1     1
              10     1     1     1
              
               1     2     3     4
               2     3     4     5
               3     4     5     6
               4     5     6     7
               5     6     7     8
               6     7     8     9
               7     8     9    10
               8     9    10    11
               9    10    11    12
              10    11    12    13
              
               1     2     3     4
               2     3     4     5
               3     4     5     6
               4     5     6     7
               5     6     7     8
               6     7     8     9
               7     8     9    10
               8     9    10     1
               9    10     1     2
              10     1     2     3
              
              abcd
              bcde
              cdef
              defg
              efgh
              fghi
              ghij
              hija
              ijab
              jabc
              
              adcf
              adcf
              adcf
              adcf
              adcf
              adcf
              adcf
              adcf
              adcf
              adcf
              
               1     0     1     0
               0     0     0     0
               0     1     0     1
               0     0     0     0
               0     0     0     0
               0     0     0     0
               0     0     0     0
               0     0     0     0
               0     0     0     0
               0     0     0     0
              
              2
              0
              2
              0
              0
              0
              0
              0
              0
              0
              
              • 然后使用函数,使每个数字介于1和nA之间,如下所示:
              输出:

               1     1     1     1
               2     1     1     1
               3     1     1     1
               4     1     1     1
               5     1     1     1
               6     1     1     1
               7     1     1     1
               8     1     1     1
               9     1     1     1
              10     1     1     1
              
               1     2     3     4
               2     3     4     5
               3     4     5     6
               4     5     6     7
               5     6     7     8
               6     7     8     9
               7     8     9    10
               8     9    10    11
               9    10    11    12
              10    11    12    13
              
               1     2     3     4
               2     3     4     5
               3     4     5     6
               4     5     6     7
               5     6     7     8
               6     7     8     9
               7     8     9    10
               8     9    10     1
               9    10     1     2
              10     1     2     3
              
              abcd
              bcde
              cdef
              defg
              efgh
              fghi
              ghij
              hija
              ijab
              jabc
              
              adcf
              adcf
              adcf
              adcf
              adcf
              adcf
              adcf
              adcf
              adcf
              adcf
              
               1     0     1     0
               0     0     0     0
               0     1     0     1
               0     0     0     0
               0     0     0     0
               0     0     0     0
               0     0     0     0
               0     0     0     0
               0     0     0     0
               0     0     0     0
              
              2
              0
              2
              0
              0
              0
              0
              0
              0
              0
              
              • 我们