如果找到下一个字母,Ruby替换字符串

ale*_*our 2 ruby regex string

我只想在模式之后的下一个字母是给定的一个字母时替换Ruby中的模式.

示例:将"αυ"替换为"av"仅在"αυ"之后的下一个字母为以下之一时:α|γ|δ|λ|μ|ν|ρ|σμ|ω

这个代码当然不会起作用,我想我需要使用正则表达式更复杂来匹配模式之后的一个字母.

string.gsub!("??", "av") if string =~ /?|?|?|?|?|?|?|??|?/
Run Code Online (Sandbox Code Playgroud)

谢谢你的任何建议.

Wik*_*żew 8

使用积极的前瞻:

string.gsub!(/??(?=?|?|?|?|?|?|?|??|?)/, "av")
Run Code Online (Sandbox Code Playgroud)

请参阅Rubular演示

细节

  • ??- ??子串
  • (?=?|?|?|?|?|?|?|??|?) - 一个积极的前瞻,需要在其中存在一个替代品,同时在匹配值内排除替代,即它将留在结果字符串中).

您也可以将单字符替换"收缩"为字符类

/??(?=[????????]|??)/
      ^^^^^^^^^^
Run Code Online (Sandbox Code Playgroud)

请参阅另一个Rubular演示.??不能放在一个字符类中,因为它包含2个字符.