包含“OR”管道的RegEx与输入字符串中的管道匹配

时间:2013-09-30 12:13:09

标签: ruby regex

作为验证方法的一部分,我需要确保输入字符串(称为“motif”)不包含某些字符(b,j,o,u,x,z)。

这就是我目前使用的:

    if motif.match(/[b|j|o|u|x|z]/) #check whether the motif contains only amino acid residues and not other junk.
        dead("The motif query must only contain the following characters "ACDEFGHIKLMNPQRSTVWY").)
    end

如上面的脚本所示,如果motif包含这些字符,则运行一个方法('dead'),这将停止脚本。

问题是上面的正则表达式是它也匹配管道|。这是一个问题,因为输入会定期包含管道。

e.g。

motif = "RR|H..R"时,脚本因正则表达式与管道匹配而停止。

我尝试使用\转义管道,但这不起作用......

任何帮助都将非常感激。

注意:这是ruby脚本的一部分。

2 个答案:

答案 0 :(得分:3)

您应该使用:

motif.match(/[bjouxz]/)

由于字符类管道内部按字面意思处理,即文字|而不是正则表达式。

以下也可以(管道被视为正则表达式OR):

motif.match(/(b|j|o|u|x|z)/)

但是在这里使用字符类更好/更清洁。

答案 1 :(得分:0)

您还可以使用match

的简写
motif[/[bjouxz]/]