Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
RegExp-GWT/Javascript的测试方法_Java_Javascript_Regex_Gwt - Fatal编程技术网

RegExp-GWT/Javascript的测试方法

RegExp-GWT/Javascript的测试方法,java,javascript,regex,gwt,Java,Javascript,Regex,Gwt,我想通过使用正则表达式来检测字符串是否为十进制。我的问题更多的是如何使用正则表达式机制,而不是检测字符串是否是十进制。我使用GWT提供的RegExp类 String regexDecimal = "\\d+(?:\\.\\d+)?"; RegExp regex = RegExp.compile(regexDecimal); String[] decimals = { "one", "+2", "-2", ".4", "-.4", ".5", "2.

我想通过使用正则表达式来检测
字符串
是否为十进制。我的问题更多的是如何使用正则表达式机制,而不是检测
字符串
是否是十进制。我使用
GWT
提供的
RegExp

        String regexDecimal = "\\d+(?:\\.\\d+)?";
        RegExp regex = RegExp.compile(regexDecimal);
        String[] decimals = { "one", "+2", "-2", ".4", "-.4", ".5", "2.5" };
        for (int i = 0; i < decimals.length; i++) {
            System.out.println(decimals[i] + " "
                    + decimals[i].matches(regexDecimal) + " "
                    + regex.test(decimals[i]) + " "
                    + regex.exec(decimals[i]));
        }
我希望
String.matches()
RegExp.test()
两个方法都返回相同的结果

  • 那么两者之间的区别是什么呢 两种方法
  • 如何使用
    RegExp.test()
    获得相同的行为

  • 尝试将正则表达式更改为

    "^\\d+(?:\\.\\d+)?$"
    
    说明
    双重转义是因为我们在Java中。。。
    正则表达式从
    ^
    开始,强制正则表达式从字符串的最开始匹配。
    regex end with
    $
    强制regex从字符串的最末端匹配


    这就是让String.matches()与GWT RegExp.test()执行相同操作的方法。

    我不知道两者的区别,但我想说,
    RegExp.test()
    是正确的,因为只要字符串中有一个数字,正则表达式就会匹配,
    String.matches()
    的行为就像正则表达式周围的锚一样

    \\d+(?:\\.\\d+)?
    
    您的非捕获组是可选的,因此一个
    \\d
    [0-9]
    )就足以匹配,无论周围是什么

    当您将锚添加到正则表达式时,这意味着它必须从头到尾匹配字符串,然后
    RegExp.test()
    可能会显示相同的结果

    ^\\d+(?:\\.\\d+)?$
    

    两个答案都很好,解决了我的问题,既然它们基本上是相同的答案,那么现在我接受哪一个呢?
    ^\\d+(?:\\.\\d+)?$