正则表达式 MATLAB 中的 nul 字节

nul bytes in regexp MATLAB

有人可以解释一下 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 预计为 '.',如正则表达式通配符中那样。

编辑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.

这个错误可能已经修复。我在几个版本的 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 = 

     []