我正在使用libphonenumber我尝试查看一些电话号码,如果它们有效,可以找到here的正则表达式模式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}]*
这是什么意思[++]*+
是否意味着“加或加零或多次加上?
彼此相邻的两个加号是否有意义?
答案 0 :(得分:3)
答案 1 :(得分:2)
最右边的+
是相当新的。正如其他人所说,[++]
的意思是“找到一个+
”。使用*
量词:[++]*
表示“零个或多个加号”。
所有正则表达式引擎都不支持+
中最右边的[++]*+
,但意味着“不做任何回溯”,即执行“最大匹配”。与?
对比,它与最小匹配。
答案 2 :(得分:2)
+
被视为文字。它应该是[+]*+
*+
是Possessive Quantifier ..它没有回溯..
答案 3 :(得分:1)
字符类([...]
)忽略重复的字符
因此,[++]
相当于\+
。
答案 4 :(得分:0)
第二个+
在字符类的内部和外部都是多余的。
在角色类[++]
中,它被忽略了。在字符类之外,它充当量词(一个或多个)但是无效,因为除了在此之前使用另一个量词如*
时(对于零或更多),因为它表示占有欲
你可以通过在它之后放置一个额外的+来使量词占有。例如。 *贪心,*?是懒惰的,* +是占有欲。 ++,?+和{n,m} +也都是占有欲。