Regex 正则表达式不使用一次或无

Regex 正则表达式不使用一次或无,regex,regex-lookarounds,Regex,Regex Lookarounds,下面是我的正则表达式: [^4\d{3}-?\d{4}-?\d{4}-?\d{4}$] 但它在-处抛出一个错误。我使用的是?,它应该允许-显示零次或一次。为什么它会给出错误?尝试用\转义-,然后删除[和]: ^4\d{3}\-?\d{4}\-?\d{4}\-?\d{4}$ 正则表达式的问题在于,模式中包含了被视为字符类标记的[和](请参阅): 使用“字符类”,也称为“字符集”,您可以告诉正则表达式引擎只匹配几个字符中的一个。只需将要匹配的字符放在方括号中即可。如果要匹配a或e,请使用[ae]

下面是我的正则表达式:

[^4\d{3}-?\d{4}-?\d{4}-?\d{4}$]

但它在
-
处抛出一个错误。我使用的是
,它应该允许
-
显示零次或一次。为什么它会给出错误?

尝试用
\
转义
-
,然后删除
[
]

^4\d{3}\-?\d{4}\-?\d{4}\-?\d{4}$

正则表达式的问题在于,模式中包含了被视为字符类标记的
[
]
(请参阅):

使用“字符类”,也称为“字符集”,您可以告诉正则表达式引擎只匹配几个字符中的一个。只需将要匹配的字符放在方括号中即可。如果要匹配
a
e
,请使用
[ae]

在字符类中,
-
在文字字符之间创建范围。在您的情况下,这些范围无效(从具有较高值的字符到具有较低值的字符),因为
{4}
和其他子模式被视为单独的字符,而不是特殊结构:

因此,您只需删除两侧的
[
]

^4\d{3}-?\d{4}-?\d{4}-?\d{4}$

看。

你是什么意思?如果输入为
-
。它是有效的。你在哪里/如何使用这个正则表达式?你想达到什么目的?我希望连字符出现一次,或者不出现。你想在正则表达式中包含括号吗?括号是转义字符,因为它们用于字符范围。通过使用
\[
\]
对其进行转义。这个问题的问题是,错误太明显了,我们拒绝看到它。方括号不能用于分组。我非常怀疑OP需要的是这一点。转义连字符将删除错误,但不会更正表达式本身。@Stribizev,但OP没有说他想与这个正则表达式匹配什么。那么,你的正则表达式应该匹配什么?@Stribizev,我不知道。我刚刚删除了错误。量词或类不能在字符集中使用,因为一个集合一次匹配一个字符,这会破坏整个正则表达式。卸下支架应该可以解决这个问题。是的。我知道了。谢谢:)事实上,OP可能想在发布另一个问题之前检查一下。@tripleee:是的,我希望有这样的过滤器。也许与regex相关的问题应该只从regex标签wiki页面发布:)?