21

x00MATLAB が正規表現で nul バイト ( ) を使用して何をしているのか説明できますか?

例:

>> 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 正規表現は印刷できない文字を処理するためのものではありませんが、その場合はエラーになると思います。

'.'編集: 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 バイトしかありません。505 番目の文字が一致しないため、これは 9 にのみ一致すると予想され0ます。

4

1 に答える 1

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 = 

     []
于 2016-05-10T13:54:29.633 に答える