Regex 此可选字符串中的第二个“^”是否冗余?

Regex 此可选字符串中的第二个“^”是否冗余?,regex,syntax,parentheses,Regex,Syntax,Parentheses,在介绍正则表达式的的第1章中,我看到了如下正则表达式: ^(\(\d{3}\)|^\d{3}[.-]?)?\d{3}[.-]?\d{4}$ 我有点困惑,因为第二个^对我来说是多余的。括号内的分隔了两个选项\(\d{3}\)或^\d{3}[.-]?,括号外有一个^,我理解为匹配行的开头,因此我认为^\d{3}[.]中的第二个^不必匹配行的开头。有人对此有什么想法吗?是的,对我来说,这看起来也是多余的。第一个锚就足够了 我是这样认为的,它可以分解为几个部分: ^ ( \(\d{3}\)

在介绍正则表达式的
的第1章中,我看到了如下正则表达式:

^(\(\d{3}\)|^\d{3}[.-]?)?\d{3}[.-]?\d{4}$


我有点困惑,因为第二个
^
对我来说是多余的。括号内的
分隔了两个选项
\(\d{3}\)
^\d{3}[.-]?
,括号外有一个
^
,我理解为匹配行的开头,因此我认为
^\d{3}[.]中的第二个
^
不必匹配行的开头。有人对此有什么想法吗?

是的,对我来说,这看起来也是多余的。第一个锚就足够了

我是这样认为的,它可以分解为几个部分:

^ ( \(\d{3}\) | ^\d{3}[.-]? )? \d{3} [.-]? \d{4} $ ^ ( \(\d{3}\) | ^\d{3}[.-]? )? \d{3} [.-]? \d{4} $
这看起来确实是多余的,但有一种可能的解释是有效的(尽管从上下文来看是不合理的)

您只在问题中包含了正则表达式模式;您没有向我们展示的是是否正在使用任何修饰符

如果使用
m
修饰符将正则表达式解析器切换到多行模式,则
^
$
锚定会更改其含义,以便与行的开始和结束以及整个字符串的开始和结束相匹配

因此,如果表达式使用了
m
修饰符,那么附加的
^
将告诉它在该特定实例中查找额外的换行符。因此,它会对表达式产生影响


但归根结底,看看你所引用的表达实际上是做什么的,我怀疑这是本意;正如你所设想的那样,它看起来确实基本上是一个错误。

是的,它是多余和无用的。嗯,它不会崩溃;)


^
标记字符串/行的开头,不会创建任何结果,指针也不会在内部移动,因此表达式
^
^^
^^^^^
都是相等的。

旁注:我强烈建议不要验证电话号码。有太多的方面需要考虑。例如,如果有人需要给你一个国际号码怎么办?作为一个前辈,我遇到了很多麻烦,因为美国公司无法理解在北美之外还有一个完整的世界……:-)你在哪本书或参考书中看到了这一点?@T.J.Crowder:完全同意。甚至不要让我开始讲邮政编码。
,因为这是一个“介绍”。它可能是有意添加的,以明确正则表达式在某些情况下可能是“困难的”或“复杂的”
问得好,很高兴看到。不过,在
m
上的捕捉很好。
^(\(\d{3}\)|^\d{3}[.-]?)?\d{3}[.-]?\d{4}$