匹配正则表达式时排除某些字符

时间:2014-01-24 13:49:20

标签: ruby regex

/[a-zA-Z]*/

以上匹配a-z中的所有字符,但我希望在字符串中有'if'时排除。

尝试[^if]但无法实现我的目标。

[编辑] 我有一个公式评估器,它返回一些值:

value = "if(a < b,a,b+1)"
formula = value.gsub(/[a-zA-Z]*/,'1')
verify = Calc.evaluate(formula)

我正在尝试将1分配给字符串中的ab,并检查公式是否有效并进行评估。

Expected Output: "if(1 < 1,1,1+1)"

3 个答案:

答案 0 :(得分:1)

你可以试试这个:

/((?!if )[a-zA-Z])*/

string = "abc"
string.match(/((?!if )[a-zA-Z])*/) 
# MatchData "abc"
string = "if abc" 
# MatchData ""

答案 1 :(得分:0)

为了满足您的需求,您可以像这样使用gsub

"if(a < b,a,b+1)".gsub(/[a-zA-Z]+/){|m| m == 'if' ? m : '1' }

答案 2 :(得分:0)

  

我正在尝试将1分配给字符串中的a和b ...

好吧,如果你想这样做,那你为什么要搞乱除ab以外的任何事情?

str = 'if(a < b,a,b+1)'
str.gsub(/\b[ab]\b/, '1') # => "if(1 < 1,1,1+1)"

\b是一个字边界标记,因此\b[ab]\b表示ab必须是单个字符。