检查字符串末尾的子字符串

Roh*_*lvi 6 ruby string substring

假设我有两个字符串:

  1. "这个测试有一个"
  2. "这有一个测试"

如何匹配字符串末尾的"Test",只得到第二个结果,而不是第一个字符串.我正在使用,include?但它将匹配所有出现,而不仅仅是字符串末尾出现子串的那些.

str*_*eil 13

你可以非常简单地使用end_with?,例如

"Test something Test".end_with? 'Test'
Run Code Online (Sandbox Code Playgroud)

或者,您可以使用与字符串末尾匹配的正则表达式:

/Test$/ === "Test something Test"
Run Code Online (Sandbox Code Playgroud)


Ser*_*sev 6

"This-Test has a ".end_with?("Test") # => false
"This has a-Test".end_with?("Test") # => true
Run Code Online (Sandbox Code Playgroud)


Chr*_*ell 6

哦,可能性很多......

假设我们有两个字符串,a = "This-Test has a"并且b = "This has a-Test.

因为你想要匹配任何完全结束的字符串"Test",所以一个好的RegEx /Test$/就是"大写T,然后是e,然后s,然后t是行的末尾($)".

Ruby有一个=~运算符,它对字符串(或类似字符串的对象)执行RegEx匹配:

a =~ /Test$/ # => nil (because the string does not match)
b =~ /Test$/ # => 11 (as in one match, starting at character 11)
Run Code Online (Sandbox Code Playgroud)

你也可以使用String#match:

a.match(/Test$/) # => nil (because the string does not match)
b.match(/Test$/) # => a MatchData object (indicating at least one hit)
Run Code Online (Sandbox Code Playgroud)

或者您可以使用String#scan:

a.scan(/Test$/) # => [] (because there are no matches)
b.scan(/Test$/) # => ['Test'] (which is the matching part of the string)
Run Code Online (Sandbox Code Playgroud)

或者您可以使用===:

/Test$/ === a # => false (because there are no matches)
/Test$/ === b # => true (because there was a match)
Run Code Online (Sandbox Code Playgroud)

或者您可以使用String#end_with?:

a.end_with?('Test') # => false
b.end_with?('Test') # => true
Run Code Online (Sandbox Code Playgroud)

......或其他几种方法之一.随便挑选.