0

由于正则表达式,我一直在战斗中..

我在 Response 中得到了类似的东西[14-23.0, 14-23, 23.320]。我将逐步解释清楚。

a)响应的值应设置为 EditText。(我已经完成)
b)响应的值不应被验证。
c) 应验证响应以外的值。

以下是不需要验证的字符串。

a)14-23.0
b)14-23
c)​​23.320

需要验证的场景。

a)14--23.0
b)1.4-23.0
C)14-2.3.0

以下代码我使用了哪些不起作用。

public static String BondPricePatternValidation(String mString){

        String pattern = "(\\d+)-(\\d+).(\\d+)";

        // Create a Pattern object
        Pattern r = Pattern.compile(pattern);

        // Now create matcher object.
        Matcher m = r.matcher(mString);
        if (m.find( )) {
            System.out.println("Found value: " + m.group(0) );
            System.out.println("Found value: " + m.group(1) );
            System.out.println("Found value: " + m.group(2) );
        } else {
            System.out.println("NO MATCH");
        }
        return pattern;

    }

有人可以在正则表达式中帮助我做到这一点吗?

4

2 回答 2

1

^(\\d+-)?(\\d+)\\.?\\d+$应该做的伎俩。

让我知道它是否适合您的需求。

于 2013-10-24T06:36:32.680 回答
1

我不确定我是否理解你的问题。因此,让我按照我的理解重新陈述您的问题。您正在寻找一个正则表达式,它只允许 (1) 仅允许类似浮点数,或者 (2) 看起来像一个范围在一个类似整数的数字和另一个整数甚至一个类似浮点数之间的范围,严格来说中间有一个破折号。可能不完全是这样,但让我以这种方式回答这个问题,当你澄清时,我将进行编辑。

让我们从第二种选择rangeE 开始。您可能不想要类似 的数字0004,所以这里是匹配“常规外观”整数的方法:

[1-9]\\d*

然后,您只需要一个破折号,很简单:

[1-9]\\d*-

然后,另一个数字,除了这个可以是浮点数,所以让我们使用量词?

[1-9]\\d*-[1-9]\\d*(?:\\.\\d+)?

现在,要完成此操作,我们只需要将整个范围部分也设为可选:

[1-9]\\d*(?:-[1-9]\\d*(?:\\.\\d+)?)?

应该就是这样。顺便说一句,如您所见,您需要转义您.的 s,否则它们代表通配符。

最后一点是关于锚定的。您可以简单地在每一端添加^$,以免在每一侧都允许其他字符:

^[1-9]\\d*(?:-[1-9]\\d*(?:\\.\\d+)?)?$

但是,如果您打算在更大的文本块中匹配此模式,则需要使用否定的lookbehind 断言:

(?<![1-9])[1-9]\\d*(?:-[1-9]\\d*(?:\\.\\d+)?)?
于 2013-10-24T06:39:09.847 回答