Regex 为什么打开大括号可以转义而关闭大括号不能?

Regex 为什么打开大括号可以转义而关闭大括号不能?,regex,Regex,: 因为我们想要做的不仅仅是搜索文本的文字片段,我们需要保留某些字符以供特殊使用。在本教程讨论的正则表达式中,有12个具有特殊含义的字符:反斜杠\、插入符号^、美元符号$、句点或圆点、竖条或管道符号|、问号?、星号或星号*、加号+、左括号(、右括号)、左方括号[,和开头的大括号{,这些特殊字符通常被称为“元字符”。它们中的大多数单独使用时都是错误的 为什么打开的大括号可以转义,而关闭的大括号不能转义?它毕竟有特定于正则表达式的含义。因为它不是必需的。当关闭大括号有特殊含义时,文字关闭大括号无论如

:

因为我们想要做的不仅仅是搜索文本的文字片段,我们需要保留某些字符以供特殊使用。在本教程讨论的正则表达式中,有12个具有特殊含义的字符:反斜杠\、插入符号^、美元符号$、句点或圆点、竖条或管道符号|、问号?、星号或星号*、加号+、左括号(、右括号)、左方括号[,和开头的大括号{,这些特殊字符通常被称为“元字符”。它们中的大多数单独使用时都是错误的


为什么打开的大括号可以转义,而关闭的大括号不能转义?它毕竟有特定于正则表达式的含义。

因为它不是必需的。当关闭大括号有特殊含义时,文字关闭大括号无论如何都不会出现:

foo{2,3}
匹配“fooo”和“fooo”,而
foo\{2,3}
匹配“foo{2,3}”


foo{2,3\}
是什么意思?在以
{
开头的量词中,只能出现数字和逗号。

因为它是不需要的。如果右大括号有特殊含义,则文字右大括号无论如何都不能出现:

foo{2,3}
匹配“fooo”和“fooo”,而
foo\{2,3}
匹配“foo{2,3}”


foo{2,3\}
是什么意思?在以
{
开头的量词中,只能出现数字和逗号。

更准确地说,它是说:

左括号
…左括号
[
,右括号 单独使用时,打开大括号是错误的


这是正确的,因为当大多数引擎在遍历正则表达式时遇到一个左括号时,它对他们来说不仅仅意味着一个文字字符,所以他们试图寻找结束对,否则这是一个语法错误。直到现在,他们还没有从末尾解析正则表达式,为未配对的结束括号抛出一个错误。

更准确地说事实上,它是这样说的:

左括号
…左括号
[
,右括号 单独使用时,打开大括号是错误的


这是正确的,因为当大多数引擎在遍历正则表达式时遇到一个左括号时,它对他们来说不仅仅意味着一个文字字符,所以他们试图寻找结束对,否则这是一个语法错误。直到现在,他们还没有从结尾处解析正则表达式,为未配对的结束括号抛出一个错误。

您的语句t关闭的大括号不能转义的说法是错误的。除了使用不必要的转义外,编写
\}
而不是
}
没有什么错。但是,永远不需要转义
}
如L3viathan的回答中所述。相关:您关于关闭大括号不能转义的陈述是不正确的。除了使用不必要的转义外,编写
\}
而不是
}
没有什么错。但是,不需要像L3viathan的回答中所解释的那样转义
。相关: