我正在使用libphonenumber,并尝试使用正则表达式模式VALID_PHONE_NUMBER检查一些电话号码是否有效。该模式可以在这里找到,它的样子是这样的
private static final String VALID_PHONE_NUMBER =
DIGITS + "{" + MIN_LENGTH_FOR_NSN + "}" + "|" +
"[" + PLUS_CHARS + "]*+(?:[" + VALID_PUNCTUATION + STAR_SIGN + HASH_SIGN +"]*" + DIGITS + "){3,}[" +
VALID_PUNCTUATION + STAR_SIGN + HASH_SIGN + VALID_ALPHA + DIGITS + "]*";
在我的Android手机上,这个表达式被编译成以下内容。
\p{Nd}{1}|[++]*+(?:[-x--?-?--/ ?? ()()[].\[\]/~?~~*#]*\p{Nd}){3,}[-x--?-?--/ ?? ()()[].\[\]/~?~~*#DEFGABCLMNOHIJKUTWVQPSRYXZdefgabclmnohijkutwvqpsryxz\p{Nd}]*
这句话的意思是什么:[++]*+
它的意思是“加加零次或多次,然后再加上”吗?
连续两个加号有什么意义吗?
[++]*+
,但是有[+]*+
,因为您使用的是 Java,它是一种占有量词。 - Ibrahim Najjar