Android 用于跟踪数字的正则表达式

Android 用于跟踪数字的正则表达式,android,regex,Android,Regex,这是一个相当奇怪的问题,但我无法找到具体的答案 我正在制作一个Android应用程序,它接收一个跟踪号码,然后决定使用哪个API(联邦快递/美国邮政) 我为正则表达式编写的代码如下所示: String USPSPattern1 = "/\\b((420 ?\\d\\d\\d\\d\\d ?)?(91|94|01|03|04|70|23|13)\\d\\d ?\\d\\d\\d\\d ?\\d\\d\\d\\d ?\\d\\d\\d\\d ?\\d\\d\\d\\d( ?\\d\\d)?)

这是一个相当奇怪的问题,但我无法找到具体的答案

我正在制作一个Android应用程序,它接收一个跟踪号码,然后决定使用哪个API(联邦快递/美国邮政)

我为正则表达式编写的代码如下所示:

    String USPSPattern1 = "/\\b((420 ?\\d\\d\\d\\d\\d ?)?(91|94|01|03|04|70|23|13)\\d\\d ?\\d\\d\\d\\d ?\\d\\d\\d\\d ?\\d\\d\\d\\d ?\\d\\d\\d\\d( ?\\d\\d)?)\\b/i";
    String USPSPattern2 = "/\\b((M|P[A-Z]?|D[C-Z]|LK|EA|V[A-Z]|R[A-Z]|CP|CJ|LC|LJ) ?\\d\\d\\d ?\\d\\d\\d ?\\d\\d\\d ?[A-Z]?[A-Z]?)\\b/i";

    String FedExPattern1 = "/\\b((96\\d\\d\\d\\d\\d ?\\d\\d\\d\\d|96\\d\\d|\\d\\d\\d\\d) ?\\d\\d\\d\\d ?\\d\\d\\d\\d( ?\\d\\d\\d)?)\\b/i";

    if(trackingNum.matches(USPSPattern1) || trackingNum.matches(USPSPattern2))
    {
        Log.d("USPS", "TRACKING NUMBER IS USPS");
        mListener.onTrackingNumberSelected(trackingNum,1);
    }

    if(trackingNum.matches(FedExPattern1))
    {
        Log.d("FEDEX", "TRACKING NUMBER IS FEDEX");
        mListener.onTrackingNumberSelected(trackingNum,2);
    }

    else
    {
        Log.d("INVALID", "TRACKING NUMBER IS NEITHER USPS OR FEDEX");
        mListener.onTrackingNumberSelected(trackingNum,0);
    }

我正在使用有效的USPS编号进行测试,但由于某些原因,正则表达式不匹配。有人知道为什么会这样吗?

首先有一些建议

  • 使用{}运算符。这会让你的生活更简单。不要使用
    \\d\\d\\d\\d
    ,而是使用
    \\d{4}
  • 我不知道你为什么从
    /

  • 希望这两件事能使模式更清晰,并让您找出问题所在。

    您能包括一些测试用例吗?