regexp online regex matlab nul

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 = []