我有一个正则表达式,其中包含一个字符类,后跟两个“基数”字符 - 不确定它们还被称为什么。如果重要的是正在运行的正则表达式引擎是内置的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
答案 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。
其他量词运算符也可以通过添加+
(即*+
或++
分别是*
和+
的所有格版本来占有一席之地)。