R vs sed正则表达式贪婪

R vs sed正则表达式贪婪,第1张

概述我不太明白为什么这不会导致“测试”并且会理解一个解释: a = "blah test"sub('^.*(test|$)', '\\1', a)# [1] "" 将它与sed表达式进行比较: echo 'blah test' | sed -r 's/^.*(test|$)/\1/'# testecho 'blah blah' | sed -r 's/^.*(test|$)/\1/'# Fw 我不太明白为什么这不会导致“测试”并且会理解一个解释:

a = "blah test"sub('^.*(test|$)','\1',a)# [1] ""

将它与sed表达式进行比较:

echo 'blah test' | sed -r 's/^.*(test|$)//'# testecho 'blah blah' | sed -r 's/^.*(test|$)//'#

Fwiw,以下实现了我想要的R(并且相当于上面的sed结果):

sub('^.*(test)|^.*',a)
解决方法 正则表达式引擎的开头匹配字符串末尾的所有字符,即贪婪.*,然后它尝试匹配(test | $),即字符串文字’test’或字符串的结尾.由于.*的第一个贪婪匹配匹配所有字符,它反向引用一个字符,然后再次尝试匹配(test | $),这里$匹配字符串的结尾.

使您的匹配结果成为行尾字符

我认为sed使用POSIX NFA试图在Alternation中找到最长的匹配,这与R不同,R似乎使用了传统的NFA

总结

以上是内存溢出为你收集整理的R vs sed正则表达式贪婪全部内容,希望文章能够帮你解决R vs sed正则表达式贪婪所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/1023524.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-23
下一篇 2022-05-23

发表评论

登录后才能评论

评论列表(0条)

保存