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('/')
。