有人能解释一下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.
这个错误可能已经被修复了。我在 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)