我想获得用户输入的电话号码。我有2个数字类别Golden和Normal。当用户输入某个电话号码模式时,系统会自动将其确定为Golden或Normal。我对编码某些模式有问题。其中一个Golden Pattern数字是这样的: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的第一部分没有$而第二部分有$。如果我放入或删除$符号,我不确定效果。
答案 0 :(得分:3)
(\\d)(\\1)
不检查12
,23
之类的序列等等。而是检查两个连续的数字,例如11
,{{1} },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"
: -
答案 1 :(得分:1)
要得到这个:
AB001234其中AB的数字如12,23,34,45,56,67,78和89.这里 到目前为止我得到了什么
正则表达式看起来像:
^(12|23|34|45|56|67|78|89)001234$
$
符号表示字符串的结尾。这意味着如果在最后一个字符后面有任何aditional字符,则该字符串将与Regex不匹配。
^
符号表示字符串的开头。
有关详细信息,请查看Javadoc API上的Summary of regular-expression constructs。