0

我想获得电话号码的用户输入。我有 2 个数字类别 Golden 和 Normal。当用户输入某种模式的电话号码时,系统会自动判断为Golden或Normal。我在编码某些模式时遇到问题。黄金模式编号之一是这样的:AB001234,其中 AB 是 12、23、34、45、56、67、78 和 89 之类的数字。这是我到目前为止得到的。

    public static void main(String[] args) {

    Scanner userinput = new Scanner(System.in);


    System.out.println("Enter Telephone Number");
    String nophone = userinput.next();

    String Golden = "(\\d)(\\1)002345|(\\d*)12345$";
    //I want to add AB001234 pattern to the line above but I don't know how.


    if (nophone.matches(Golden)) {
        System.out.println("Golden");
    }


    else {
        System.out.println("Normal");
    }
    }

我不确定我是否真的必须使用正则表达式。还有一个问题,你可以看到 String Golden 的第一部分没有 $ 而第二部分有 $。如果我放置或删除 $ 符号,我不确定效果。

4

2 回答 2

3

(\\d)(\\1)不检查序列1223等等。而是检查两个连续数字,如11, 22, 33, ...

要检查序列,您必须明确地使用Pipe(|)- (12|23|34|45|...)

所以,你的模式Golden Number应该是这样的: -

^(?:12|23|34|45|56|67|78|89)001234$

(?:..)- 表示non-capturing group. 它不会在您的模式中被捕获为编号组。

注意: -如果您的长度sequence不同,则Regex不是匹配它们的合适方法。

对于第二个问题,$表示字符串的结尾。因此,$末尾的模式将在字符串的末尾匹配。另外,Caret (^)是否匹配字符串的开头。

例如: -

  • abc$匹配字符串"asdfabc",但不匹配"sdfabcf"
  • ^abc匹配字符串"abcfsdf",但不匹配"sdfabcf"
  • ^abc$只匹配字符串"abc",因为它是唯一一个以 . 开头和结尾的字符串"abc"

您可以通过以下链接了解更多信息Regexp:-

于 2012-11-07T08:42:12.807 回答
1

要得到这个:

AB001234,其中 AB 是 12、23、34、45、56、67、78 和 89 之类的数字。这是我到目前为止得到的

正则表达式看起来像:

^(12|23|34|45|56|67|78|89)001234$

$符号表示字符串的结尾。这意味着如果在最后一个字符之后有任何附加字符,则该字符串将与正则表达式不匹配。

^符号表示字符串的开头。

有关更多信息,请查看Javadoc API 上的正则表达式构造摘要。

于 2012-11-07T08:46:54.497 回答