Ruby on rails 正则表达式:在独占的或上匹配

Ruby on rails 正则表达式:在独占的或上匹配,ruby-on-rails,ruby,regex,Ruby On Rails,Ruby,Regex,我想要一个正则表达式,它可以匹配RACE或RACE_1的字符串,但不能匹配RACE_2和RACE_3。我已经试了一段时间想弄明白,但似乎无法满足所有需要满足的条件。感谢您的帮助。/p>/RACE_|种族1/ 这有点像黑客,但可能适合你的需要 编辑: 这里可能有一个更具体的方法,效果更好 /比赛_\d |种族1/ 在这两种情况下,您都使用负前瞻来强制执行RACE后面不能跟u和一个数字,但随后使用or语句明确地允许它 此外,如果您计划只搜索所述匹配的实例,这些实例是完整的单词,请在前面加上\b以指定

我想要一个正则表达式,它可以匹配RACE或RACE_1的字符串,但不能匹配RACE_2和RACE_3。我已经试了一段时间想弄明白,但似乎无法满足所有需要满足的条件。感谢您的帮助。

/p>/RACE_|种族1/

这有点像黑客,但可能适合你的需要

编辑: 这里可能有一个更具体的方法,效果更好 /比赛_\d |种族1/

在这两种情况下,您都使用负前瞻来强制执行RACE后面不能跟u和一个数字,但随后使用or语句明确地允许它

此外,如果您计划只搜索所述匹配的实例,这些实例是完整的单词,请在前面加上\b以指定单词边界

/\撑杆_\d|种族1\b/

/RACE_|种族1/

这有点像黑客,但可能适合你的需要

编辑: 这里可能有一个更具体的方法,效果更好 /比赛_\d |种族1/

在这两种情况下,您都使用负前瞻来强制执行RACE后面不能跟u和一个数字,但随后使用or语句明确地允许它

此外,如果您计划只搜索所述匹配的实例,这些实例是完整的单词,请在前面加上\b以指定单词边界

/\撑杆_\d | RACE_1\b/

您可以使用: \大括号[1]?\b

它需要一个RACE副本,然后0->N次出现u[1]。在方括号中,您可以包括您想要的任何数字。例子: \支架[12345]?\b将与第5场比赛相匹配。然后,如果您希望[1245]用于RACE_1、RACE_2、RACE_4、RACE_5,但不用于RACE_3,您可以对其进行自定义,甚至可以跳过数字。

您可以使用: \大括号[1]?\b

它需要一个RACE副本,然后0->N次出现u[1]。在方括号中,您可以包括您想要的任何数字。例子: \支架[12345]?\b将与第5场比赛相匹配。然后,如果您希望[1245]用于RACE_1、RACE_2、RACE_4、RACE_5但不用于RACE_3,您可以对其进行自定义,甚至可以跳过数字

\b表示一个单词的结尾,这阻止了RACE_2中的匹配RACE


\b表示一个单词的结尾,这会阻止RACE_2中的匹配比赛。

RACE_10或RACE_CAR呢?正则表达式是否应该与这些匹配?不,不应该匹配,尽管选项是已知的集合,但在堆栈溢出时,您应该提供显示您的工作的代码。如果我们可以引用您的代码,并显示出错的地方,我们将更容易帮助您学习。简单地要求某人为您编写它并不是堆栈溢出的意思。相关代码只是一个regex/RACE/RACE\u 10或RACE\u CAR?正则表达式是否应该与这些匹配?不,不应该匹配,尽管选项是已知的集合,但在堆栈溢出时,您应该提供显示您的工作的代码。如果我们可以引用您的代码,并显示出错的地方,我们将更容易帮助您学习。简单地要求某人为您编写它并不是堆栈溢出的意思。相关代码只是一个regex/RACE/一点hack对我来说没问题:一点hack对我来说没问题:这也将匹配TRACE_1_1_1_1。我想你希望前面是a\b,你的*应该是a?。仅供参考,{1}没有效果。你告诉它匹配前一个原子,这是在没有量词的情况下它会做的。顺便说一句,在这种情况下,前一个原子是指E;如果你希望它适用于整个单词,你需要使用一个组,就像你用*一样。@ ALAMOMOR感谢提示,所以前面的B使它的模式需要匹配第一个字母,不能在一个新行的中间开始。更新了我的答案以反映您的评论。它阻止它在较长的单词中匹配,如GRACE或FOOTRACE。OP没有把这作为一项要求,但我认为应该假设这就是他的意思。更为严格的是,要求匹配的文本本身在一行上。这也将匹配TRACE_1_1_1_1。我想你希望前面是a\b,你的*应该是a?。仅供参考,{1}没有效果。你告诉它匹配前一个原子,这是在没有量词的情况下它会做的。顺便说一句,在这种情况下,前一个原子是指E;如果你希望它适用于整个单词,你需要使用一个组,就像你用*一样。@ ALAMOMOR感谢提示,所以前面的B使它的模式需要匹配第一个字母,不能在一个新行的中间开始。更新了我的答案以反映您的评论。它阻止它在较长的单词中匹配,如GRACE或FOOTRACE。OP没有把这作为一项要求,但我认为应该假设这就是他的意思。更严格的是,要求匹配的文本本身在一行上。
/^RACE(_1)?$/
RACE(_1)?\b