2012-08-02 62 views
0

我需要在ruby中向正則表達式添加一個字符串,這是我試圖做的事情(我獲取我目錄中的所有文件,打開它們,發現它們是否有模式,然後通過加入已經存在的東西修改模式,要做到這一點,我需要實際的字符串)在Ruby中從正則表達式獲取字符串

Dir["*"].each do |tFile| 
    file = File.open(tFile, "rb") 
    contents = file.read 
    imageLine=/<img class="myclass"(.*)\/>/ 
    if(contents=~imageLine) 
     puts contents.sub!(imageLine, "some string"+imageLine+"some other string") 
    end 
end 
+0

我覺得你需要用寫入權限'File.open(tFile,'rw')'打開文件並迭代文件的每一行,替換你找到模式的那一行。 – MurifoX 2012-08-02 14:23:54

+0

如果您正在寫入,則打開並寫入。這裏的'puts'將會發送到STDOUT。 – tadman 2012-08-02 14:49:46

回答

1

您可以使用subgsub與捕獲組:

"foo".gsub(/(o)/, '\1x') 
=> "foxox" 

欲瞭解更多信息,請參閱the docs

0

您正在使用sub!這是就地修飾語版本。雖然這有其用處,但該方法的結果不是字符串,而是指示是否做了任何事情。

sub方法更適合這種情況。如果您有多個必須替換的匹配項,請使用gsub

在進行替換時,您可以使用像\1這樣的佔位符來處理捕獲的部分,在正則表達式中使用括號捕獲捕獲的部分,或者使用塊版本進行更多的任意操作。

IMAGE_REGEXP = /<img class="myclass"(.*)\/>/ 

Dir["*"].each do |tFile| 
    File.open(tFile, "rb") do |in| 
    puts in.read.gsub(IMAGE_REGEXP) { |s| "some string#{s}some other string" } 
    end 
end 
相關問題