为什么只要 GT 符号“>”是正则表达式中的第一个字符,gsub 就无法工作

Why is gsub not working whenever GT sign ">" is the first character in regex

在我处理的文本数据中,大于号总是被认为是最后一个字符。因此,我想替换所有不符合条件的事件:

some_variable.gsub!(/>([^\n])/, ">\n\1")

但是,我一直收到 *undefined 方法 gsub!' for nil:NilClass (NoMethodError)* error when calling thisgsub!` – 即使我用反斜杠转义了那个字符。 令我惊讶的是,更改它以使 GT 符号不是正则表达式中的第一个:

some_variable.gsub!(/(.)>([^\n])/,"\1\n\2")

让它发挥作用。但为什么? gsub 到 return 零这不是很奇怪吗?

gsub!(破坏性)returns无when it doesnt modify anything

因此如果没有通配符该正则表达式不匹配,它的行为是预期的

这与gsub!无关。错误消息说您尝试在 nil 上调用 gsub!,即这意味着 some_variablenil,而您并不期望它是。 gsub! 的参数,甚至 gsub! 本身的调用,都是完全不相关的,你的问题是 some_variablenil,而你期望它是 String.