2

大多数语言都允许固定长度或有限长度的后视。一个值得注意的例外是 .NET,它允许使用 * 运算符。

但是,.NET 正则表达式已经可以使用命名捕获识别平衡括号,这不是常规语言。正则表达式在后视中是否仍然是带有 * 的常规表达式?对 * 以外的子表达式的扩展答案(例如,额外的环视!)也将不胜感激。

tl;dr:正则表达式是否与 * 保持一致?

4

3 回答 3

1

我相信这里的答案:环视是否会影响正则表达式可以匹配哪些语言?可以扩展以证明在lookbehind中添加*(甚至嵌套这样的lookbehinds和lookaheads)不会影响表达式的“规则性”。不过我也没有多想。

希望有帮助!

于 2010-08-02T16:33:19.967 回答
0

.NET 的无限后视只是对已经非常规特性的改进:固定的、有限的或无限的,后视在常规语法中没有位置。前瞻、捕获组、反向引用、勉强量词、所有格量词、原子组、条件句、单词边界、锚点......

如果我们不得不将自己限制在理论上纯正的正则表达式,99.9% 的当前正则表达式用户将不会使用它们。询问某个功能是否“常规”是浪费口舌;有用吗?这才是最重要的。

于 2010-07-29T00:39:16.517 回答
0

正则表达式在交集下闭合。添加一个新符号 & 并重写后向:A(?<B)C 为 (?:AC&.*BC),我们得到后向是常规的。

B 可以包括清楚地使用任何不超过 A/C 边界的东西。也就是说,除了前瞻之外的任何东西。如果lookbehind 可以使用lookahead 会发生什么,反之亦然?开始工作 .*BC 。你还好。

因此,正则表达式确实可以添加交集和无限长的环视(可以包括任何深度的更多环视),并且仍然同样有效。

于 2010-07-29T13:01:50.073 回答