2017-04-11 258 views
1

我要检查一个字符串只包含字母,a-zA-Z,数字0-9,和运营商(+=-*/^)检查字符串是否只包含指定的字符

例如,下面的表达式是允许的:3 + 5(x^2)

对于例如,以下表达式将允许使用而不是3 $+ 5(x^2)

我会使用matches函数来执行此操作吗?

我想:

// contains only operators, numbers, or letters 
if(!exp.matches("[(+=-*/^)a-zA-Z0-9]")) { 
    return false; 
} 

我也试图逃避星号,但没有奏效。

+0

'='和'*'之间的短划线需要出现在字符类的末尾。 – dasblinkenlight

+0

@dasblinkenlight或者被转义,这对于将来编辑正则表达式可能不太容易出错。 – Andreas

+0

非常感谢你! – defoification

回答

3

你应该逃过-或者把它放在字符类的开始/结尾,否则它会创建一个范围。需要注意的是[=-*]范围无效

enter image description here

另外,你需要一个量词,+匹配1个或多个字符,*匹配0或更多。

使用

if(!exp.matches("[a-zA-Z0-9+=*/^()-]+")) { 
     return false; 
} 

如果您不需要匹配(),从字符类中删除它们。

此外,由于String#matches()需要完整的字符串匹配,所以在正则表达式的开始和结尾处不需要锚点。

+0

非常感谢你! – defoification

+0

并且确保不要先放入'^',因为它也有特殊含义,就像'-'不是首先或最后一样。 – Andreas

+0

@Andreas:角色类不是*否定的*,它是积极的。即该模式应该只匹配一个有效的模式。如果字符串与模式不匹配,则返回false。 –

相关问题