Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/23.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,假设我有: foo/fhqwhgads foo/fhqwhgadshgnsdhjsdbkhsdabkfabkveybvf/bar 我想替换“foo/”后面的所有内容,直到我到达“/”,或者,如果从未到达过“/”,则一直到行的末尾。对于第一部分,我可以使用如下非捕获组: (?<=foo\/).+ (?<=foo\/).+(?=\/) 我使用的是Ruby。我不是Ruby开发人员,但是否有与php的explode()等价的东西,以便您可以分解字符串,在第二个数组索引处插入一个新项,然

假设我有:

foo/fhqwhgads
foo/fhqwhgadshgnsdhjsdbkhsdabkfabkveybvf/bar
我想替换“foo/”后面的所有内容,直到我到达“/”,或者,如果从未到达过“/”,则一直到行的末尾。对于第一部分,我可以使用如下非捕获组:

(?<=foo\/).+
(?<=foo\/).+(?=\/)

我使用的是Ruby。

我不是Ruby开发人员,但是否有与php的explode()等价的东西,以便您可以分解字符串,在第二个数组索引处插入一个新项,然后使用/再次内爆部分。。。当然,如果您只想在某些情况下进行切换,您可以在第一个数组元素上进行匹配。

我不是ruby开发人员,但是否存在与php的explode()等效的元素,以便您可以分解字符串,在第二个数组索引处插入一个新项,然后使用/再次内爆这些部分。。。当然,如果您只想在某些情况下进行切换,您可以在第一个数组元素上进行匹配。

检查字符串结束锚点--
$
--以及
/
字符应该可以做到这一点。您还需要通过将
+
更改为
+?
来使
+
非贪婪,因为贪婪版本将始终匹配到字符串的末尾,如果有机会的话

(?<=foo\/).+?(?=\/|$)

(?检查字符串结尾锚点--
$
--以及
/
字符应该可以做到这一点。如果有机会,您还需要将
+
更改为
+?
以使其不贪婪,因为贪婪的版本将始终匹配到字符串结尾

(?<=foo\/).+?(?=\/|$)
(?试试这个正则表达式:

/(?<=foo\/)[^\/]+/
/(?试试这个正则表达式:

/(?<=foo\/)[^\/]+/
/(?
输出:

foo/blah
foo/blah/bar
我太累了,想不出更好的方法来做这件事,但我肯定有一种

输出:

foo/blah
foo/blah/bar

我太累了,想不出更好的方法来做这件事,但我确信有一种方法。

实现@Endophage的答案:

def fix_post_foo_portion(string)
  portions = string.split("/")
  index_to_replace = portions.index("foo") + 1
  portions[index_to_replace ] = "blah"
  portions.join("/")
end

strings = %w{foo/fhqwhgads foo/fhqwhgadshgnsdhjsdbkhsdabkfabkveybvf/bar}
strings.each {|string| puts fix_post_foo_portion(string)}

实施@Endophage的答案:

def fix_post_foo_portion(string)
  portions = string.split("/")
  index_to_replace = portions.index("foo") + 1
  portions[index_to_replace ] = "blah"
  portions.join("/")
end

strings = %w{foo/fhqwhgads foo/fhqwhgadshgnsdhjsdbkhsdabkfabkveybvf/bar}
strings.each {|string| puts fix_post_foo_portion(string)}

尝试了这个,但对我无效。将/及其后的所有内容作为捕获组的一部分处理。@Ben:在这种情况下,您可能需要使捕获不贪婪(通过附加
)。我将编辑…尝试了此操作,但对我无效。将/及其后的所有内容视为捕获组的一部分。@Ben:在这种情况下,您可能需要使捕获不贪婪(通过附加
)。我将编辑…这是简短的。谢谢!Meh,不需要非捕获组。这是简短的。谢谢!Meh,不需要非捕获组。Ruby支持
split('/')
join('/')
。Ruby支持
split('/')
join('/')