Czy ktoś może wyjaśnić, co robi MATLAB z zerowymi bajtami (x00
) w wyrażeniach regularnych?nul bajtów w regexp MATLAB
Przykłady:
>> 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
Odpowiedź może być po prostu, MATLAB wyrażenie regularne nie jest przeznaczona do obsługi znaki spoza druku, ale zakładam, że to błąd, jeśli to był przypadek.
EDYCJA: Oczekuje się, że liczba 46 będzie równa '.'
, podobnie jak w przypadku symbolu wieloznacznego regex.
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
uświadomiłem sobie, że mogło być 10 jest znakiem specjalnym więc ten jeden ma tylko druku i nul bajtów. Spodziewam się, że ten będzie pasował tylko do 9, ponieważ piąty znak 50
nie pasuje do 0
.
Dlaczego oczekiwać pierwszy przykład, aby zwrócić '4' i twój czwarty przykład, aby zwrócić' [] '? Wydaje mi się, że mają dla mnie sens. W pierwszym przypadku wzór "NUL NUL NUL NUL. NUL NUL "będzie pasować do" NUL NUL NUL NUL NUL NUL NUL NUL "na początku łańcucha. – eigenchris
@eigenchris Myślę, że pasowałoby tylko do 4, ponieważ 10 na końcu wzoru nie powinno pasować do 1 w obu przypadkach, prawda? – horriblyUnpythonic
Masz rację. Znak nowej linii nie zachowywał się tak, jak się spodziewałem. Do tej pory to też mnie zaskoczyło. – eigenchris