大多数语言允许固定长度或有限长度的后视。一个值得注意的例外是.NET,它允许使用*运算符。
但是,.NET正则表达式已经可以使用命名捕获识别平衡括号,而不是常规语言。正则表达式中的正则表达式仍然是常规的吗?除了*之外的子表达式的扩展答案(例如,额外的外观!)也将受到赞赏。
tl; dr:正则表达式是否与*在后面保持一致?
答案 0 :(得分:1)
我相信这里的答案:Does lookaround affect which languages can be matched by regular expressions?可以扩展到证明在后面添加*(甚至嵌套这样的lookbehinds和lookaheads)不会影响表达式的“规则性”。我没有考虑过它。
希望有所帮助!
答案 1 :(得分:0)
.NET的无界外观仅仅是对已经非常规特征的改进:固定,有限或无限,外观在常规语法中没有位置。前瞻,捕捉群体,反向引用,不情愿的量词,占有量词,原子群,条件,词边界,锚点......
如果我们不得不将自己局限于理论上纯粹的正则表达式,那么99.9%的当前正则表达式用户将无法使用它们。询问某个特征是否“正常”是浪费气息;是有用吗?这就是最重要的。
答案 2 :(得分:0)
正则表达式在交叉点下关闭。添加新符号&并重写lookbehind: A(?< B)C as (?:AC&。* BC),我们看起来很有规律。
B可以包括明确使用任何不超过A / C边界的东西。也就是说,除了前瞻之外的任何事情。如果lookbehind可能使用前瞻,反之亦然会发生什么?开始工作。* BC。你还好。
因此,正则表达式可以真正添加交集和无限长度的外观(可以包括更多的任何深度的外观),它仍然会同样有效。