2013-07-17 90 views
1

我有同样的模式的字符串是这样的:正则表达式 - 递归模式

../assets/ 
../../assets/ 
../../../assets/ 

我使用正则表达式使用找../模式:

(\.\./) 

我的目的是要取代所有的../变成root/,上面的所有字符串都会变成这样:root/assets/

有没有办法做t与正则表达式的某种递归模式的帽子?


更新

我使用C#

string content1 = "../assets"; 
string content2 = "../../assets"; 
string content3 = "../../../assets"; 
string pattern1 = "(\.\./)"; 
string pattern2 = "(\.\./\.\./)"; 
string pattern3 = "(\.\./\.\./\.\./)"; 

// All the result is "root/assets" 
content1 = Regex.Replace(content1, pattern1, "root/"); 
content2 = Regex.Replace(content2, pattern2, "root/"); 
content3 = Regex.Replace(content3, pattern3, "root/"); 

回答

2

没有必要递归,你可以做s#(\.\./)+#root/#g(没有指定哪一种语言,所以这是红宝石/ Perl的版本):找到任意数量的重复../,并用root/替换整个东西。