【问题标题】:nul bytes in regexp MATLAB正则表达式 MATLAB 中的 nul 字节
【发布时间】:2015-03-23 17:48:16
【问题描述】:

有人能解释一下 MATLAB 在正则表达式中使用 nul 字节 (x00) 做什么吗?

例子:

>> 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 字节。我希望这个只匹配 9,因为第五个字符 50 不匹配 0

【问题讨论】:

  • 为什么您希望您的第一个示例返回4 而您的第四个示例返回[]?它们对我来说似乎很有意义。在第一种情况下,模式NUL NUL NUL NUL . NUL NUL 将匹配字符串开头的NUL NUL NUL NUL NUL NUL NUL
  • 似乎在正则表达式模式前加上0 46 0 将导致模式中任何后续字符的自动匹配,无论它们是什么:regexp(char([0 0 0 1 2 3 4]),char([0 46 0 11 22 33 44]))
  • 你在使用 Matlab 的什么 version?我无法在 R2015b 中复制它,但我可以在 R2015a 中复制。似乎它可能是一个已修复的错误。
  • @horschler 我也一样!使用 8.6.0.267246 (R2015b) 我得到了预期的结果,而 R2015a 给了我奇怪的结果。

标签: regex matlab nul


【解决方案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 = 

     []

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多