Ruby 如何更改字符串中的特殊符号?

Ruby 如何更改字符串中的特殊符号?,ruby,regex,Ruby,Regex,例如,我有一个字符串 s = "start |foo bar|, middle, |reg ex| end" 我想更改方括号中的|,以便 "start [foo bar], middle, [reg ex] end" 如何使用regex实现它? 至少,我想捕获| foo bar |和| reg ex |,但我的方法是: /\|.+\|/ 捕获| foo bar |,中间,| reg ex | s.match(/\|.+\|/)[0] # => "|foo bar|, middle,

例如,我有一个字符串

s = "start |foo bar|, middle, |reg ex| end"
我想更改方括号中的
|
,以便

"start [foo bar], middle, [reg ex] end"
如何使用regex实现它? 至少,我想捕获
| foo bar |
| reg ex |
,但我的方法是:

/\|.+\|/
捕获
| foo bar |,中间,| reg ex |

s.match(/\|.+\|/)[0] # => "|foo bar|, middle, |reg ex|"

尝试使正则表达式不贪婪:

/\|.+?\|/

/\|[^|]+\|/
"start |foo bar|, middle, |reg ex| end".gsub(/\|(.+?)\|/, '[\1]')
=> "start [foo bar], middle, [reg ex] end" 

"start |foo bar|, middle, |reg ex| end".gsub(/\|(.+?)\|/) do |str|
  puts $1
end

foo bar
reg ex
=> "start , middle,  end"