regexp MATLAB中的nul字节

hor*_*nic 21 regex matlab nul

有人能解释一下MATLAB x00在正则表达式中使用nul bytes()做了什么吗?

例子:

>> 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
Run Code Online (Sandbox Code Playgroud)

答案可能只是,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
Run Code Online (Sandbox Code Playgroud)

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

tvo*_*tvo 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
Run Code Online (Sandbox Code Playgroud)

在 R2015a 中:

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

     2
Run Code Online (Sandbox Code Playgroud)

在 R2016a 中:

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

     []
Run Code Online (Sandbox Code Playgroud)