Ruby 带有';和';

Ruby 带有';和';,ruby,regex,Ruby,Regex,如果一个字符串匹配三个正则表达式,我需要返回true。我有很多关于每个正则表达式模式的正则表达式选项。我可以对这三个值中的每一个使用单独的匹配/扫描,并将它们与和结合起来,查看它们是否都返回TRUE。这管子坏了 在下面的代码中,我只需要为第一个mystring3获取TRUE: mystr3= ' OK 3 values MyServer and myNode and myuser TRUE ' mystr2= 'has on 2 values mynode## and .myser

如果一个字符串匹配三个正则表达式,我需要返回
true
。我有很多关于每个正则表达式模式的正则表达式选项。我可以对这三个值中的每一个使用单独的
匹配
/
扫描
,并将它们与
结合起来,查看它们是否都返回TRUE。这管子坏了

在下面的代码中,我只需要为第一个
mystring3
获取
TRUE

mystr3= '  OK 3 values MyServer  and myNode  and myuser  TRUE '
mystr2= 'has on 2 values   mynode##  and .myserver should be FALSE'
mystr1= ' has on 1 values  Myserver  should be FALSE'

regex1 = /\bmyserver\b/i ;   regex2 = /\bmynode\b/i ;   regex3 = /\bmyuser\b/i

regex = /#{regex1}|#{regex2}|#{regex3}/  ## AND  /#{regex2}/  and /#{regex3}/

p  'match3 ' + mystr3.scan(regex).to_s
p  'match2 ' + mystr2.scan(regex).to_s

但我认为应该有比这更简单的方法。

要检查字符串是否与这三个字符串匹配,可以对子表达式使用三次lookahead:

regex = /^(?=.*#{regex1})(?=.*#{regex2})(?=.*#{regex3})/

Tx CP!!我在我的示例字符串上尝试了你的正则表达式,没有返回任何内容,检查更多,无论这些键盘的顺序如何,它都能工作吗,很抱歉忘记提到这一点。对我有效:请注意,匹配的子字符串(如果有)将是空字符串,这与不匹配完全不同。是的,lookaheads之间不使用字符,因此它们可以按任何顺序排列。再次发送,我需要自己再多教一点,标记为应答。现在对我来说一切正常,再次发送。关键是,如果字符串
str
匹配所有三个正则表达式,
str=~regex
str.match
str[regex]
all返回一个“truthy”值(分别是数值偏移量、
MatchData
对象或空字符串);否则全部返回
nil
。我们可以使这些表达式中的任何一个返回
true
false
,方法是在它们前面加上
;例如,
!!(str=~regex)
。自从这个问题发布后,我们得到了返回
true
false
的方法。