online - regexp mysql
nul bytes en expresiones regulares MATLAB (1)
¿Alguien puede explicar lo que está haciendo MATLAB con nulos bytes ( x00
) en expresiones regulares?
Ejemplos:
>> 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
La respuesta podría ser simplemente que la expresión regular de MATLAB no está destinada a manejar caracteres no imprimibles, pero supongo que sería un error si este fuera el caso.
EDITAR: Se espera que el 46 sea ''.''
como en el comodín de 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
Me di cuenta de que podría haber sido 10 un personaje especial, por lo que este solo tiene bytes imprimibles y nulos. Esperaría que este solo coincida con 9 porque el quinto personaje 50
no coincide con 0
.
este error probablemente ya está solucionado. Probé tu ejemplo de Matlab Central en varias versiones:
en R2013b:
>> regexp(char([0 0 1 0 41 41 41 41 41 41]),char([0 ''.'' 0 40 40 40 40]))
ans =
2
en R2015a:
>> regexp(char([0 0 1 0 41 41 41 41 41 41]),char([0 ''.'' 0 40 40 40 40]))
ans =
2
en R2016a:
>> regexp(char([0 0 1 0 41 41 41 41 41 41]),char([0 ''.'' 0 40 40 40 40]))
ans =
[]