积极的向后看没有按预期工作

Posted

技术标签:

【中文标题】积极的向后看没有按预期工作【英文标题】:Positive lookbehind not working as expected 【发布时间】:2015-07-30 10:27:06 【问题描述】:

我在使用 .net 正则表达式匹配字符串时遇到了一点问题。 例如我有以下字符串:

II Kop 15 / 1544

我想匹配 / 字符后面的第二个数字。 此外,我只想在前面的数字后跟斜杠时匹配该数字。此外,此数字只能是 2 位或 4 位数字。

我想出了这样的东西:

(\b[0-9]2\b|\b[0-9]4\b)

它匹配 2 或 4 位数字,因为它在这里匹配 15 和 1544。 现在我正在尝试积极的向后看:

(\b[0-9]2\b|\b[0-9]4\b)(?

不匹配。我究竟做错了什么?请帮忙。

【问题讨论】:

【参考方案1】:

将外观放在捕获组之前更简单。

(?<=[0-9] / )([0-9]4|[0-9]2)

.NET 中允许可变长度后视,因此您也可以将正则表达式编写为:

(?<=[0-9]\s*/\s*)([0-9]4|[0-9]2)

【讨论】:

是和不是。是的-> 我必须在表达式之前放置lookbehind。否 - ,net 正则表达式支持无限宽度后视,替换后它确实有效。我将此标记为答案,因为它对我有帮助。 Second, you can't use + * ? .NET 允许可变长度后视。 避免使用\d,除非您想匹配 Unicode 中的数字。速记字符类\s\d\w 匹配 .NET 中的 Unicode 字符 感谢指正。我不知道.NET 支持可变长度的后视。为什么 \d 像这样匹配 Unicode 数字 \U4324。你能告诉我一些网址吗? (我不是程序员,但我想了解背后的原因)。最后:在某些字符串后面查找,其中后面的匹配肯定在匹配的字符串之前,即使在大多数情况下感觉不到,也会花费更长的时间来运行。与零次 (*​​) 相同,我喜欢尽可能避免它,以便更快地运行 + 在可能的情况下涉及一些其他逻辑。

以上是关于积极的向后看没有按预期工作的主要内容,如果未能解决你的问题,请参考以下文章

Ionic 2禁用没有导航栏的向后滑动

为啥这个 SUM() 字段没有按预期工作?

如何在javascript中向前或向后查找用户选择天气?

为啥响应式表没有按预期工作?

否定字符没有按预期工作? ^

为啥脚手架没有按预期工作?