Ruby:使用gsub在String中进行条件替换

Mar*_*cka 3 ruby regex conditional replace

给定一个输入字符串:

<m>1</m>
<m>2</m>
<m>10</m>
<m>11</m>
Run Code Online (Sandbox Code Playgroud)

我想更换不等于所有的值15.
所以输出String应如下所示:

<m>1</m>
<m>5</m>
<m>5</m>
<m>5</m>
Run Code Online (Sandbox Code Playgroud)

我试过用:

gsub(/(<m>)([^1])(<\/m>)/, '\15\3')
Run Code Online (Sandbox Code Playgroud)

但这不会取代1011.

The*_*heo 19

#gsub 可以选择一个块,并将替换为该块的结果:

subject.gsub(/\d+/) { |m| m == '1' ? m : '5' }
Run Code Online (Sandbox Code Playgroud)

  • 或者您可以在块中使用$ 1,$ 2和$ 3并忽略参数:`subject.gsub(/(<m>)(\ d +)(<\/m>)/){| m | $ 1 +($ 2 =='1'?$ 2:'5')+ $ 3}` (2认同)