21

有人可以解释 MATLABx00在正则表达式中使用 nul 字节()做什么吗?

例子:

>> regexp(char([0 0 0 0 0 0 0 1 0 0 10 0 0 0]),char([0 0 0 0 46 0 0 10]))
ans =
      1  % current
      4  % expected

>> regexp(char([0 0 0 1 0 0 0 1 0 0 10 0 0 0]),char([1 0 0 0 46 0 0 10]))
ans =
      4  % current
      4  % expected

>> regexp(char([0 0 0 1 0 0 0 1 0 0 10 0 0 0]),char([0 0 0 0 46 0 0 10]))
ans =
      [] % current
      [] % expected

>> regexp(char([0 0 0 0 10 0 0 1 0 0 10 0 0 0]),char([0 0 0 0 46 0 0 10]))
ans =
      1  % current
      [] % expected

>> regexp(char([0 0 0 0 0 0 0 1 0 0 10 0 0 0]),char([1 0 0 0 46 0 0 10]))
ans =
      [] % current
      [] % expected

答案可能很简单,MATLAB 正则表达式并不意味着处理不可打印的字符,但如果是这种情况,我认为它会出错。

编辑: 46 预计'.'与正则表达式通配符中的一样。

编辑2:

>> regexp(char([0 0 0 0 50 0 0 100 0 0 90 0 0 0]),char([0 0 46 0 0 90]))
ans =
     1    9

我意识到它可能是 10 是一个特殊字符,所以这个字符只有可打印和 nul 字节。我希望这个只匹配 9 因为第五个字符50不匹配0

4

1 回答 1

1

这个错误可能已经修复了。我从 Matlab Central 测试了您的示例,有几个版本:

在 R2013b 中:

>> regexp(char([0 0 1 0  41 41 41 41 41 41]),char([0 '.' 0  40 40 40 40]))    
ans =

     2

在 R2015a 中:

>> regexp(char([0 0 1 0  41 41 41 41 41 41]),char([0 '.' 0  40 40 40 40]))   
ans =  

     2

在 R2016a 中:

>> regexp(char([0 0 1 0  41 41 41 41 41 41]),char([0 '.' 0  40 40 40 40]))
ans = 

     []
于 2016-05-10T13:54:29.633 回答