0

I want to get user input for telephone numbers. I have 2 number categories Golden and Normal. When the user enter certain pattern of a telephone number, the system will automatically determine it as Golden or Normal. I'm having problem to code certain pattern. One of the Golden Pattern number is like this: AB001234 where AB is number like 12,23,34,45,56,67,78 and 89. Here what I got so far.

    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");
    }
    }

I'm not sure do I really have to use regex or not. One more question, you can see the first part of String Golden is without $ while the second part has $. I'm not sure the effect if I put or remove the $ symbol.

4

2 に答える 2

3

(\\d)(\\1)12、などのようなシーケンスをチェックしません23。むしろ、、、、、..のような2つの連続した数字をチェック1122ます33

シーケンスをチェックするには、Pipe(|)- を使用して明示的に行う必要があります。(12|23|34|45|...)

したがって、のパターンは次のGolden Numberようになります。-

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

(?:..)-を意味しnon-capturing groupます。パターン内の番号付きグループとしてキャプチャされることはありません。

注:-の長さsequenceが変化している場合Regexは、それらを一致させる適切な方法ではありません。

2番目の質問で$は、は文字列の終わりを示します。したがって、最後にあるパターン$は、文字列の最後に一致します。また、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 に答える