2015-03-23 9 views
21

Kann jemand erklären, was MATLAB mit null Bytes (x00) in regulären Ausdrücken macht?keine Bytes in Regexp MATLAB

Beispiele:

>> 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 

Die Antwort könnte einfach sein, regelmäßige MATLAB Ausdruck nicht nicht druckbare Zeichen gemeint ist, zu handhaben, aber ich würde annehmen, dass es Fehler wäre, wenn dies der Fall war.

EDIT: Die 46 wird voraussichtlich wie in der Regex-Wildcard sein.

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 

ich es realisiert könnte 10 haben einen besonderen Charakter zu sein, so das man nur druckbare und nul Bytes hat. Ich würde erwarten, dass diese nur mit 9 übereinstimmt, weil das fünfte Zeichen 50 nicht mit 0 übereinstimmt.

+0

Warum erwarten Sie Ihre erste Beispiel, um '4' zurückzugeben und Ihr viertes Beispiel, um' [] 'zurückzugeben? Sie scheinen mir einen Sinn zu ergeben. Im ersten Fall ist das Muster "NUL NUL NUL. NUL NUL' wird am Anfang der Zeichenfolge "NUL NUL NUL NUL NUL NUL" entsprechen. – eigenchris

+0

@eigenchris Ich würde denken, es würde nur passen 4 wegen der 10 am Ende des Musters sollte nicht die 1 in beiden Fällen übereinstimmen, oder? – horriblyUnpythonic

+0

Sie haben Recht. Der Newline-Charakter verhielt sich nicht so, wie ich es zuerst erwartet hatte. Bis jetzt hat mich das auch ratlos gemacht. – eigenchris

Antwort

1

Dieser Fehler ist wahrscheinlich bereits behoben. Getestet habe ich Ihr Beispiel aus Matlab Central in mehreren Versionen:

in R2013b:

>> regexp(char([0 0 1 0 41 41 41 41 41 41]),char([0 '.' 0 40 40 40 40]))  
ans = 

    2 

in R2015a:

>> regexp(char([0 0 1 0 41 41 41 41 41 41]),char([0 '.' 0 40 40 40 40])) 
ans = 

    2 

in R2016a:

>> regexp(char([0 0 1 0 41 41 41 41 41 41]),char([0 '.' 0 40 40 40 40])) 
ans = 

    []