匹配贪婪、非贪婪和介于两者之间的所有其他 [英] Matching both greedy, nongreedy and all others in between
本文介绍了匹配贪婪、非贪婪和介于两者之间的所有其他的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
给定一个类似"/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屋!
查看全文