匹配贪婪、非贪婪和介于两者之间的所有其他 [英] Matching both greedy, nongreedy and all others in between

查看:0
本文介绍了匹配贪婪、非贪婪和介于两者之间的所有其他的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

给定一个类似"/foo/bar/baz/quux"的字符串(将其视为指向一个单一系统上的文件的路径),我如何(如果可能的话)制定一个正则表达式,给出可以说包含文件quux的所有可能路径?

换句话说,在对给定字符串("/foo/bar/baz/quux")运行regexp时,我希望获得AS结果:

  • "/foo/"
  • "/foo/bar/"
  • "/foo/bar/baz/"

我尝试了以下方法:

  • '//.+//g'-默认情况下这是贪婪的,匹配"/foo/bar/baz/"
  • '//.+?//g'-惰性版本,匹配"/foo/""/baz/"

附言:我在函数preg_match()中使用了与Perl兼容的正则表达式)

推荐答案

菲利普不是在找/foo/bar/baz, /bar/baz, /baz,而是在找/foo, /foo/bar, /foo/bar/baz

一个建立在注释中正则表达式思想但给出正确字符串的解决方案:

  • 反转要匹配的字符串:xuuq/zab/rab/oof/例如,在PHP中使用strrev($string )

  • 匹配(?=((?<=/)(?:w+/)+))

这将为您提供

zab/rab/oof/
rab/oof/
oof/

然后用strrev($string)

反转匹配

这将为您提供

/foo/bar/baz
/foo/bar
/foo

如果您有.NET而不是PCRE,您可以从右到左进行匹配,并可能得到相同的结果。

这篇关于匹配贪婪、非贪婪和介于两者之间的所有其他的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆