有人可以用正则表达式解释什么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是一个特殊的字符,所以这个只有可打印和nul字节。我希望这个只能匹配9,因为第五个字符50不匹配0。
这个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 = []