为什么"? immediately after a parenthesis"正则表达式中的语法错误?



Python正则表达式HOWTO解释了非捕获和命名组的语法是如何产生的:

对于这些新特性,Perl开发人员不能选择新的单键元字符或以开头的新的特殊序列,而不会使Perl正则表达式与标准正则表达式产生混淆。例如,如果他们选择&作为新的元字符,旧的表达式将假设&是一个正则字符,并且不会通过编写&[&]来转义它。

Perl开发人员选择的解决方案是使用(?...)作为扩展语法。紧跟在括号后面的?是一个语法错误,因为?没有什么可重复的,所以这没有引入任何兼容性问题。

我不明白为什么括号里应该有重复的东西?我确实理解总体的观点,采取一些导致语法错误的东西,用来扩展正则表达式的功能,将防止现有的正则表达式被破坏。

regular-expressions.info解释得很好。

…问号是使前一个标记可选的量词。此量词不能出现在左括号之后,因为在组的开始处没有可选的内容。因此,问号作为使令牌可选的操作符与问号作为非捕获组的语法的一部分之间没有歧义…

没有什么可选的,因为?之前的标记是组打开元字符(,而不是在字符串中可搜索的东西,如常规字符。

我不同意你所链接的HOWTO中的措辞。可选-即0次或1次-不是"重复"。

最新更新