正则表达式只匹配一个字符,如果没有后跟另一个字符,则只替换该初始字符

时间:2010-11-25 06:09:40

标签: regex

例如,

(/=[^>]/, '═')

我想保持这个匹配,但只用双水平线替换等号。实际上,它匹配任何'=',后跟任何不是'>'的东西。但随后用替换字符替换'='和后续字符,我想保留以下字符,但只替换'='。如果它产生任何语法差异,那就是红宝石。

示例输入:

= render :partial => 'file'

第一个=应该转换,第二个应该保存

2 个答案:

答案 0 :(得分:12)

根据您的正则表达式库(我不知道Ruby),您可以使用零宽度断言:

/=(?!>)/

请注意,此正则表达式与正则表达式略有不同,但它更符合您在标题中提供的说明。它将匹配=之后未跟随的任何>。这包括在文本末尾匹配=,您的版本将不匹配。

答案 1 :(得分:1)

喜欢这个? (我使用的是-而不是你所拥有的特殊字符):

irb内部:

ruby-1.9.2-p0 > "=x".gsub(/=([^>])/, '-\1')
 => "-x" 

ruby-1.9.2-p0 > "=>".gsub(/=([^>])/, '-\1')
 => "=>" 
相关问题