Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Ruby中从正则表达式获取字符串_Ruby_Regex - Fatal编程技术网

在Ruby中从正则表达式获取字符串

在Ruby中从正则表达式获取字符串,ruby,regex,Ruby,Regex,我需要在ruby中的正则表达式中添加一个字符串,这就是我试图做的(我获取目录中的所有文件,打开它们,查找它们是否有模式,然后通过添加到已经存在的内容来修改该模式,要做到这一点,我需要实际的字符串) Dir[“*”]。每个do | t文件| file=file.open(tFile,“rb”) contents=file.read 影像线=// 如果(内容=~imageLine) 把内容放在.sub!(imageLine,“一些字符串”+imageLine+“一些其他字符串”) 结束 结束 您可以

我需要在ruby中的正则表达式中添加一个字符串,这就是我试图做的(我获取目录中的所有文件,打开它们,查找它们是否有模式,然后通过添加到已经存在的内容来修改该模式,要做到这一点,我需要实际的字符串)

Dir[“*”]。每个do | t文件|
file=file.open(tFile,“rb”)
contents=file.read
影像线=//
如果(内容=~imageLine)
把内容放在.sub!(imageLine,“一些字符串”+imageLine+“一些其他字符串”)
结束
结束

您可以对捕获组使用
sub
gsub

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

有关更多信息,请参阅。

您正在使用的
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
IMAGE\u REGEXP=//
Dir[“*”]。每个do | t文件|
打开(tFile,“rb”)do|in|
放入.read.gsub(IMAGE|REGEXP){s|“一些字符串{s}一些其他字符串”}
结束
结束

我认为您需要使用写入权限打开文件,
File.open(tFile,'rw')
并迭代文件的每一行,替换找到模式的那一行。如果正在写入,则使用写入打开。这里,
放置
将进入标准输出。
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