1

我有以下条件:动态条件

if "FIX_STRING 0,0,DYNAMIC_STRING" == "FIX_STRING #{integer_from_0_to_5},#{integer_from_0_to_5},#{DYNAMIC_STRING}" 
    true 
else 
    false 
end 

如何对其进行的动态也是这样吗?

if "FIX_STRING 0,0,DYNAMIC_STRING" == "FIX_STRING #{/0|1|2|3|4|5/},#{/0|1|2|3|4|5/},#{/A|B|C|D/}" 
    true 
else 
    false 
end 
+2

真的不清楚你要在这里做什么。也许用纯英文描述你的目标会更好。 –

+0

您是否正在寻找这样的正则表达式:'if“FIX_STRING 0,0,DYNAMIC_STRING”.match(/ FIX_STRING [0-5],[0-5],[A-Z _] + /)then true else false end '?是否必须仅匹配从A到D的整个DYNAMIC_STRING或大写字母?请更准确地问你的问题。 – guitarman

回答

2

你在这里是正确的轨道,但你有一个非常独特的编码风格。首先要指出的是,比较==已经返回一个布尔值truefalse,没有理由if然后返回完全相同的东西。

第二件事是你要比较一个字符串与另一个字符串,所以他们必须匹配刚好。足够接近不计数。如果您评估其他字符串你得到一个烂摊子:

"FIX_STRING (?-mix:0|1|2|3|4|5),(?-mix:0|1|2|3|4|5),(?-mix:A|B|C|D)" 

最后,如果你想测试一个字符串与正则表达式,你这样做:

PATTERN = /\AFIX_STRING [0-5],[0-5],[A-D]\z/ 

你可以测试这种在Rubular上做的事情做得对。这里[0-5]表示该范围内的任何东西。这对你所拥有的东西来说是短暂的。

然后你就可以对这种模式测试任意字符串:

"FIX_STRING 3,4,D".match(PATTERN) 
# => #<MatchData "FIX_STRING 3,4,D"> 

那么匹配。

较新版本的Ruby有一个match?方法只测试匹配,它不会返回匹配的内容,如果您在2.3或更高版本上运行,您可能会使用它。它比简单的match方法更快,但只有在循环内部进行大量匹配时才有意义。

+1

Ruby 2.4将引入'Regexp#match?',它返回'true'或'false'并且不设置全局变量。但是'match?'在2.3中不可用,我认为2.4中没有'String#match?'。 – Stefan

+0

@Stefan啊,你说得对,那是2.4的东西。 – tadman