我只想在模式之后的下一个字母是给定的一个字母时替换Ruby中的模式。
示例:将“αυ”替换为“av”仅在“αυ”之后的下一个字母为以下之一时:α|γ|δ|λ|μ|ν|ρ|σμ|ω
这段代码当然不会起作用,我想我需要使用正则表达式更复杂来匹配模式之后的一个字母。
string.gsub!("αυ", "av") if string =~ /α|γ|δ|λ|μ|ν|ρ|σμ|ω/
感谢您的任何建议。
答案 0 :(得分:8)
使用积极的前瞻:
string.gsub!(/αυ(?=α|γ|δ|λ|μ|ν|ρ|σμ|ω)/, "av")
请参阅Rubular demo
<强>详情
αυ
- αυ
子字符串(?=α|γ|δ|λ|μ|ν|ρ|σμ|ω)
- 一个积极的前瞻,需要在其中包含一个替代品,同时在匹配值中排除替代品,即它将保留在结果字符串中。)您也可以将单字母替换“收缩”为字符类
/αυ(?=[αγδλμνρω]|σμ)/
^^^^^^^^^^
见another Rubular demo。 σμ
不能放在字符类中,因为它包含2个字符。