如何查找给定字符串中子串的最后一次出现?解决结尾子串替换问题
解决方案
1. 仅替换字符串结尾的"jk"为"sd"
别用gsub!(它会替换所有匹配的"jk"),改用sub!配合匹配字符串结尾的正则表达式,精准替换末尾的目标子串:
# 示例字符串 str = "lazer<strong>jk</strong>" # 仅当"jk"在字符串结尾时替换为"sd" str.sub!(/jk\z/, "sd") # 输出结果:"lazer<strong>sd</strong>"
这里的\z是正则锚点,专门匹配整个字符串的最后位置,确保只有当"jk"是字符串的最后两个字符时才会被替换。如果字符串结尾不是"jk",sub!会返回nil,不会修改原字符串。
如果你的实际需求是替换特定标签内的"jk"(比如示例中的<strong>标签),可以调整正则表达式来匹配标签内的结尾:
str.sub!(/(<strong>)jk(<\/strong>)\z/, '\1sd\2')
2. 查找子串的最后一次出现
使用Ruby内置的String#rindex方法,直接获取子串最后一次出现的起始索引:
str = "testjk123jkxyz" # 获取最后一个"jk"的起始索引 last_occurrence_index = str.rindex("jk") # 输出:8(因为最后一个"jk"从索引8开始)
如果子串不存在于字符串中,rindex会返回nil。你还可以指定搜索的起始位置,比如从索引5往前查找:
str.rindex("jk", 5) # 返回4,对应第一个"jk"的起始索引
内容的提问来源于stack exchange,提问作者NOVA PC
相关产品推荐
相关产品推荐

