Regex 正则表达式字符类后面跟一个?+;什么意思?

Regex 正则表达式字符类后面跟一个?+;什么意思?,regex,Regex,我有一个正则表达式,它包含一个character类,后跟两个“cadinality”字符——不知道它们还被称为什么。如果重要的话,它运行的正则表达式引擎是内置的java正则表达式。java字符串文本为: "[a-zA-Z]{2}[ -]?+\\d{6}" 或者在非爪哇岛: [a-zA-Z]{2}[ -]?+\d{6} 那么,[-]?+部分具体是什么意思呢?据我所知,从测试来看,似乎+根本不存在(最初我认为,由于“操作顺序”,我没有意识到它可能会应用于它前面的所有内容,就像有括号一样) 以下通

我有一个正则表达式,它包含一个character类,后跟两个“cadinality”字符——不知道它们还被称为什么。如果重要的话,它运行的正则表达式引擎是内置的java正则表达式。java字符串文本为:

"[a-zA-Z]{2}[ -]?+\\d{6}"
或者在非爪哇岛:

[a-zA-Z]{2}[ -]?+\d{6}
那么,
[-]?+
部分具体是什么意思呢?据我所知,从测试来看,似乎+根本不存在(最初我认为,由于“操作顺序”,我没有意识到它可能会应用于它前面的所有内容,就像有括号一样)

以下通行证:

ab123456, ab-123456, ab 123456
以下失败:

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

?+
表示所有格量词。看看这个,回答更多信息

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


其他量词运算符也可以通过添加
+
(即
*+
+
分别是
*
+
的所有格版本)使其成为所有格运算符.

如果我理解正确,这里的性能不会有太大的提高,因为我们只匹配最多1个字符,对吗?@Russ:在这种情况下,我会说你是对的,你不会获得太多(如果有的话,真的)。这个表达已经相当严格了。
[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