Nul байтов в 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 не предназначено для обработки непечатаемых символов, но я бы предположил, что это будет ошибкой, если это так.
EDIT: ожидается, что 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
.
Ответы
Ответ 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
в 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 =
[]