Может кто-нибудь объяснить, что 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
.