Подтвердить что ты не робот

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.

4b9b3361

Ответ 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 = 

     []