java正则表达式检测一个double被ceil包围()

时间:2013-09-05 00:44:51

标签: java regex

我有一个像"something...ceil(0.9)...something"这样的字符串。

我使用模式p = Pattern.compile(".*ceil(.*[0-9]*\\.+[0-9]+)+.*");来检测双精度是否被ceil()包围。但它不起作用。有人帮忙吗?

3 个答案:

答案 0 :(得分:0)

这是一个基本的开头:

ceil\\([0-9]+\\.[0-9]*\\)

您可以更明确地在括号中定义数字,但您需要转义括号。

尝试使用此网站进行正则表达式测试:http://regexpal.com/

答案 1 :(得分:0)

".*ceil\\(\\d+(.\\d+)?\\).*"

匹配1738294,ect(无小数点)或2.3 4432.12634(数字点数)等数字。

如果您想接受.5之类的数字,请将第一个+更改为*

答案 2 :(得分:-2)

我没有得到; Math#ceil(double)方法将double作为参数,但无论如何,您应该尝试简单地将传递给ceil方法的参数解析为double;而不是正则表达式。如果它抛出异常,则表示它不是有效的double

private boolean validArgument(final String string){
    final int start = string.indexOf("ceil(");
    if(start < 0)
        return false;
    final int end = string.indexOf(')');
    if(end < start || end < 0)
        return false;
    try{
        Double.parseDouble(string.substring(start, end));
        return true;
    }catch(Exception ex){
        return false;
    }
}

对于使用,它会像:

final boolean valid = validArgument("Math.ceil(45.97)");应该return true