2009-08-14 92 views
2

任何人都可以指導我在正確的方向...快速正則表達式的問題

我有,我要檢查一個尾隨/斜線一些文件夾strucktures,某些文件夾不具有尾隨/如果它沒有尾 /我需要添加一個

如果我用這個表達式它的工作原理,但它代替文件夾名稱

 
    Folder/name/test 
    folder/name/test1/ 
    folder/name/test2/ 
replace(/.$/ig,"/"); 

的最後一個字符此正則表達式替換Folder/name/tes[t]/,但會拿出t/

代之以希望這是有道理的......

+2

這是什麼語言? – 2009-08-14 21:22:10

回答

1

你基本上做出的正則表達式的含義:採取的是字符串中的最後一個任意字符,用/替換它。你需要做的是組的最後一個字符,然後在更換後重新裝入,這樣的:

replace(/([^\/])$/ig,"$1/"); 

欲瞭解更多信息,請參閱 http://www.regular-expressions.info/brackets.html

+2

如果它存在,這也會加回尾部斜線,結果產生雙斜槓 - 相當於將斜線附加到所有內容。 – gapple 2009-08-14 21:38:29

+0

感謝百萬Schtibe--剛剛又學到了一些新東西:-)這很酷 - 我認爲我可能需要分兩步完成它,比如向/ all添加/,然後用/再替換double //您的答案是一舉兩得! – 2009-08-14 21:39:00

+1

你說得對。更好的方法是將 替換爲(/([^ \ /])$/ig,「$ 1 /」); 這會替換任何不是斜槓的尾隨字符 – arsenbonbon 2009-08-14 21:40:34

0

我會避免在這種情況下,正則表達式,並做一些更容易,如:

$path = rtrim($path, '/').'/'; 

編輯:

Woops,以爲是PHP的...

+0

問題是,它是一個更大的正則表達式的一部分 - 我用來替換翻譯文本 var strippeden3 = strippeden3.replace(/ü|ú/ ig,「u」); var strippeden3 = strippeden3.replace(/é|è/ ig,「e」); var strippeden3 = strippeden3.replace(/æ/ ig,「ae」); var strippeden3 = strippeden3.replace(/ø|ö|ò|ó/ ig,「o」); var strippeden3 = strippeden3.replace(/'/ ig,「/」); var strippeden3 = strippeden3.replace(/å|ä|à|á/ ig,「a」); var strippeden3 = strippeden3.replace(/,/ ig,「」); – 2009-08-14 21:24:44

3
replace(/(.)$/ig,"\1/"); 

或更好

replace(/([^\\])$/ig,"\1/"); 

如果\ 1是不是在你的語言向引用,那麼你就必須要明白這一點,或者告訴我們德語言。

+0

我正在使用Javascript和ASP - 替換(/([^ \\\])$/ig,「\ 1 /」);這個解決方案用塊替換最後一個字符,然後在塊後添加斜槓 - 就像缺少一個Unicode字符 – 2009-08-14 21:33:11

1

不知道語言,很難發佈正確答案,也不能使用以剪切和粘貼方式提供的代碼。無論如何,我可能會去爲這個正則表達式:

replace(/(.)\/*$/,"\1/"); 

這將追加後/只有,如果它現在還沒有。

+0

謝謝Earcar - 我相信你的答案也會起作用 – 2009-08-14 21:40:19

6

嘗試這樣:

replace(/[^/]$/ig, "$0/") 
+0

replace(/ [^ /] $/ig,「 $ 1 /「) - 認爲它也會感謝Gumbo! – 2009-08-14 21:41:11

+0

@Gerald Ferreira:'$ 0'不是一個錯誤,我故意使用它。 – Gumbo 2009-08-14 21:54:14

+0

爲什麼選擇Gumbo? – 2009-08-14 21:57:37

1

我不知道哪一種語言,這是爲但是這是你會怎麼做它用Perl:

#! /local/bin/perl 

my @data = <data>; 
while (<DATA>) 
{ 
    s#[^/]\n#/\n#m; 
    print; 
} 

__DATA__ 
/foo/bar/ 
/baz/jazz 
/baz/jazz 

這則打印出以下幾點:

/foo/bar/ 
/baz/jaz/ 
/baz/jazz/ 

正則表達式的關鍵是「[^ /] \ n」這基本上匹配換行符旁邊的任何內容。有了您的命名,我將承擔語法將是以下:

replace(/[^\/]\n/ig,"/"); 

或者,如果沒有新行使用此:

replace(/[^\/]$/ig,"/"); 

我希望幫助。