MATLAB正则表达式匹配'='和数字

时间:2012-11-14 18:43:26

标签: regex matlab

我正在写一个正则表达式来挑选字符串中的标点符号,并且我得到了一些我不期望的行为:

ix = regexp('FGFR4','[~!@#$%^&*()-=+{}\|;:''",<.>/?\[]')
ix =

     [5]

ix = regexp('FGFR4','[~!@#$%^&*()-+{}\|;:''",<.>/?\[]') %note, the '=' is gone
ix =

     []

所以似乎'='与数字4匹配。我期望它只是匹配'='符号:

ix = regexp('FOO=SPAM','[~!@#$%^&*()-=+{}\|;:''",<.>/?\[]')
ix =

     [4]

这里发生了什么?

1 个答案:

答案 0 :(得分:4)

问题不在于=,而在于-。它会创建从)=的所有字符范围(按ASCII顺序)。如果删除=,这不是问题的原因是+以{1}}出现在ASCII顺序中,因此范围不包括4(实际上它只包含4)*,因为无论如何都有+,这绝不重要。

三种解决方案:

  1. 逃脱连字符:

    *
  2. 或将其放在角色类的末尾:

    [~!@#$%^&*()\-=+{}\|;:''",<.>/?\[]
    
  3. 除非你想确保你使用这组字符...所以如果你可以匹配任何不是空格,字母或数字(或下划线)的东西,那么你也可以这样使用:

    [~!@#$%^&*()=+{}\|;:''",<.>/?\[-]
    

    匹配任何非下划线,非字母,非数字,非空白字符。