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

时间:2011-12-13 06:09:23

标签: ruby regex

例如我有一个字符串

s = "start |foo bar|, middle, |reg ex| end"

我想在方括号上更改|,以获取

"start [foo bar], middle, [reg ex] end"

如何使用正则表达式实现它? 至少,我想捕获|foo bar||reg ex|,但我的方法是:

/\|.+\|/

捕获|foo bar|, middle, |reg ex|

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

2 个答案:

答案 0 :(得分:2)

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

/\|.+?\|/

/\|[^|]+\|/

答案 1 :(得分:2)

"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"