正则表达式匹配字符串开头的确切子字符串

时间:2016-03-25 06:32:20

标签: ruby regex ruby-on-rails-4

我有一个子串在源字符串的开头准确匹配。

source_string = "This is mat. This is cat."

substring1 = "This is"

substring2  = "That is"

source_string.match(/^(#{substring1}|#{substring2})$/)

这就是我试过的应该是这样的,如果确切的话,This is'或者' That is'在字符串的开头它应该匹配,在source_string中的那些子字符串后面的内容并不重要。即使nil存在,我的代码也会提供'This is'

3 个答案:

答案 0 :(得分:3)

我不会使用正则表达式:

[substring1, substring2].any? { |sub| source_string.start_with?(sub) }
  #=> true

答案 1 :(得分:2)

删除正则表达式模式末尾的$

source_string.match(/^(#{substring1}|#{substring2})$/)
                                                   ↑

通过附加$,它要求模式以This isThat is结尾。您只需要^开头。

source_string = "This is mat. This is cat."
substring1 = "This is"
substring2  = "That is"
source_string.match(/^(#{substring1}|#{substring2})/)
# => #<MatchData "This is" 1:"This is">

答案 2 :(得分:1)

虽然@falsetru对核心问题是正确的,但正则表达式实际上仍然是错误的。虽然目标是匹配源字符串开头的模式,而不是每行开头的 ,但应使用wp-login.php修饰符(参见{ {3}}了解详情):

\A