正则表达式 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 =
[]
有人可以解释一下 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 =
[]