regexp MATLAB中的nul字节

时间:2015-03-23 17:48:17

标签: regex matlab nul

有人可以用正则表达式解释MATLAB在nul字节(x00)中的作用吗?

示例:

>> 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与正则表达式通配符中的'.'一样。

EDIT2:

>> 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个特殊字符,所以这个只有可打印和零字节。我希望这一个只匹配9,因为第五个字符500不匹配。

1 个答案:

答案 0 :(得分:1)

这个bug可能已经修复了。我在几个版本中测试了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 = 

     []