首页  >  文章  >  后端开发  >  可变长度回顾断言:正则表达式的未来?

可变长度回顾断言:正则表达式的未来?

Linda Hamilton
Linda Hamilton原创
2024-10-28 09:11:29452浏览

 Variable-Length Lookbehind Assertions: The Future of Regular Expressions?

正则表达式中的变长lookbehind断言

正则表达式提供了强大的模式匹配能力,但是变长lookbehind断言的实现长期以来一直是争论的话题。

Lookbehind 断言的实现

目前,Python 中的 regex 模块支持可变长度 Lookbehind 断言。语法为 (?

<code class="python">>>> import regex
>>> m = regex.search('(?<!foo.*)bar', 'f00bar')
>>> print(m.group())
bar
>>> m = regex.search('(?<!foo.*)bar', 'foobar')
>>> print(m)
None</code>

不带后向断言的替代方案

在没有lookbehind断言的情况下,有两种选择:

  • K(保留):此符号标记模式中的一个点,在该点之前在替换或分组之前,任何匹配的字符都会被丢弃。

    s/(?<=foo.*)bar/moo/s;

    变成:

    s/foo.*\Kbar/moo/s;
  • 负向前瞻: 此技术使用负数向前检查是否缺少“foo”。

    s/(?<!foo.*)bar/moo/s;

    变为:

    s/^(?:(?!foo).)*\Kbar/moo/s;

未来实现

Perl 和 JavaScript 等主流语言中缺乏可变长度后向断言,这引发了对未来实现的疑问。有一天这些语言可能会采用类似于 Python 正则表达式的增强正则表达式模块。

替代方案的局限性

  • K 并不像 Python 那样灵活后向断言,无法指定丢弃字符的结束点。
  • 负向先行可能更复杂,并且可能并非所有正则表达式引擎都支持。

其他问题

  • 是否可以指定 K 效果的终点?
  • Perl、Ruby、JavaScript 和 PHP 是否有类似于 Python 正则表达式的增强正则表达式实现?

以上是可变长度回顾断言:正则表达式的未来?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn