正则表达式字符后跟一个?+是什么意思?

时间:2011-11-04 14:25:03

标签: regex

我有一个正则表达式,其中包含一个字符类,后跟两个“基数”字符 - 不确定它们还被称为什么。如果重要的是正在运行的正则表达式引擎是内置的java正则表达式。 java字符串文字是:

"[a-zA-Z]{2}[ -]?+\\d{6}"

或者在非java土地上:

[a-zA-Z]{2}[ -]?+\d{6}

具体来说[ -]?+部分是什么意思?从测试到我可以告诉它就像+甚至没有(原来我认为由于'操作顺序'我不知道也许它会被应用到它前面的所有东西,就像有括号有)。

以下传递:

ab123456, ab-123456, ab 123456

以下失败:

aa--123456, aa  123456, aa - -123456, aa-aa-123456

2 个答案:

答案 0 :(得分:3)

?+表示占有量词。请查看此SO答案以获取更多信息Greedy vs. Reluctant vs. Possessive Quantifiers

[a-zA-Z]    # Match a single character present in the list below
               # A character in the range between “a” and “z”
               # A character in the range between “A” and “Z”
   {2}         # Exactly 2 times
[ -]        # Match a single character present in the list below
               # The character “ ”
               # The character “-”
   ?+          # Between zero and one times, as many times as possible, 
               # without giving back (possessive)
\d          # Match a single digit 0..9
   {6}         # Exactly 6 times

答案 1 :(得分:3)

这是possessive quantifier,本质上意味着?不会放弃其回溯匹配。它不会影响?匹配的重复次数 - 它仍然是零或一(贪婪)。它前面的[ -]只是一个包含空格和连字符的character class

其他量词运算符也可以通过添加+(即*+++分别是*+的所有格版本来占有一席之地)。