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

Rus*_*uss 5 regex

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

"[a-zA-Z]{2}[ -]?+\\d{6}"
Run Code Online (Sandbox Code Playgroud)

或者在非爪哇地区:

[a-zA-Z]{2}[ -]?+\d{6}
Run Code Online (Sandbox Code Playgroud)

那么该[ -]?+部分的具体含义是什么?据我所知,从测试来看,好像 + 甚至不存在(最初我认为由于“操作顺序”,我没有意识到它可能会应用于它前面的所有内容,就像有括号一样那里)。

以下通过:

ab123456, ab-123456, ab 123456
Run Code Online (Sandbox Code Playgroud)

以下失败:

aa--123456, aa  123456, aa - -123456, aa-aa-123456
Run Code Online (Sandbox Code Playgroud)

eld*_*his 4

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

其他量词运算符也可以通过添加 a 来实现所有格+(即*+or分别++是*和 的所有格版本+)。