我有一个子串在源字符串的开头准确匹配。
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'
。
答案 0 :(得分:3)
我不会使用正则表达式:
[substring1, substring2].any? { |sub| source_string.start_with?(sub) }
#=> true
答案 1 :(得分:2)
删除正则表达式模式末尾的$
。
source_string.match(/^(#{substring1}|#{substring2})$/)
↑
通过附加$
,它要求模式以This is
或That 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