加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

正则表达式 – Perl中的Lookaround断言

发布时间:2020-12-14 06:01:55 所属栏目:百科 来源:网络整理
导读:我混淆了perl中这些外观断言的用途是什么? 这个例子: (?=pattern) 或积极的向前看.所以这是我的问题: 这些有用吗?他们使用了什么样的实例? 与问题1相关,为什么我要展望正则表达式?不是更多的工作?展望未来然后再次执行模式匹配. 如果可能,我需要一个
我混淆了perl中这些外观断言的用途是什么?

这个例子:

(?=pattern)

或积极的向前看.所以这是我的问题:

>这些有用吗?他们使用了什么样的实例?
>与问题1相关,为什么我要展望正则表达式?不是更多的工作?展望未来然后再次执行模式匹配.

如果可能,我需要一个非常明确的例子.谢谢

解决方法

要大写逗号之间的内容,您可以使用:

(my $x = 'a,b,c,d,e') =~ s/(?<=,)([^,]*)(?=,)/ uc($1) /eg;   # a,B,C,D,e

                  a,e
Pass 1 matches      -
Pass 2 matches        -
Pass 3 matches          -

如果你没有使用外观,这就是你得到的,

(my $x = 'a,e') =~ s/,([^,]*),/ ','.uc($1).',' /eg;   # a,e
Pass 1 matches     ---
Pass 2 matches         ---

前瞻不仅避免重复,没有它也行不通!

另一个常见的用途是作为等同于[^ CHAR]的字符串的一部分.

foo(?:(?!foo|bar).)*bar  # foo..bar,with no nested foo or bar

您可以使用它来缩小字符类.

w(?<!d)     # A word char that's not a digit.

虽然现在可以使用(?[…])来完成.

它在更深奥的模式中也很有用.

/a/ && /b/ && /c/

可写成

/^(?=.*?a)(?=.*?b).*?c/s

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读