regexp中[++] * +代表什么?

时间:2013-08-14 13:34:40

标签: java android regex libphonenumber

我正在使用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}]*

这是什么意思[++]*+

是否意味着“加或加零或多次加上?

彼此相邻的两个加号是否有意义?

5 个答案:

答案 0 :(得分:3)

[++]匹配++

*+匹配[++] 0次或更多次,占有率

请参阅:http://www.regular-expressions.info/possessive.html

答案 1 :(得分:2)

最右边的+是相当新的。正如其他人所说,[++]的意思是“找到一个+”。使用*量词:[++]*表示“零个或多个加号”。

所有正则表达式引擎都不支持+中最右边的[++]*+,但意味着“不做任何回溯”,即执行“最大匹配”。与?对比,它与最小匹配。

另见this question

答案 2 :(得分:2)

字符类中的

+被视为文字。它应该是[+]*+

*+Possessive Quantifier ..它没有回溯..

答案 3 :(得分:1)

  1. 没有
  2. 字符类([...])忽略重复的字符 因此,[++]相当于\+

答案 4 :(得分:0)

第二个+在字符类的内部和外部都是多余的。

在角色类[++]中,它被忽略了。在字符类之外,它充当量词(一个或多个)但是无效,因为除了在此之前使用另一个量词如*时(对于零或更多),因为它表示占有欲

Possessive Quantifiers

的更多信息
  

你可以通过在它之后放置一个额外的+来使量词占有。例如。 *贪心,*?是懒惰的,* +是占有欲。 ++,?+和{n,m} +也都是占有欲。